I am using the latest version of <a href="https://github.com/elasticsearch/elasticsearch-php" rel="nofollow">elasticsearch-php</a> 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 <em>$countries</em> and/or <em>$category</em> can only have one element.Answer1:
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.