Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ElasticSearch and searching on multiple fields in PHP

I am using the latest version of elasticsearch-php as well as the latest version of MongoDB and ElasticSearch.

I need to do a search on multiple fields that can contain one or multiple values. Example:

country_code should be either NL, BE or DE AND category should contain be AA01, BB01, CC02 or ZZ11

I thought I would solve it as followed (PHP):

$countries = array(“NL”, “BE”, “DE”);
$category = array(“AA01”, “BB01”, “CC02”, “ZZ11”);

$searchParams['body']['query']['bool']['must']['terms']['country'] = $countries;
$searchParams['body']['query']['bool']['must']['terms']['categories'] = $category;
$searchParams['body']['query']['bool']['must']['terms']['minimum_should_match'] = 1;

But the result does not even come close the the data that I expect to get back.

Sometimes $countries and/or $category can only have one element.

like image 501
Marc Witteveen Avatar asked Nov 30 '25 19:11

Marc Witteveen


1 Answers

It is becaue of how PHP arrays work, you are overwriting the terms query each time, instead try something along the lines of:

array(
    'body' => array('query' => 
    'bool' => array(
        'must' => array(
            array('terms' => array('country' => implode(' ', $countries))),
            array('terms' => array('category' => implode(' ', $category))),
        )
    )
))

minimum_should_match is useless with must clause of the query.

like image 87
Sammaye Avatar answered Dec 02 '25 09:12

Sammaye



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!