我正在使用最新版本的 elasticsearch-php以及最新版本的 MongoDB 和 ElasticSearch。
我需要对可包含一个或多个值的多个字段进行搜索。示例:
country_code 应该是 NL、BE 或 DE 和 类别应包含 AA01、BB01、CC02 或 ZZ11
我想我会按照下面的方式解决它(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;
但结果甚至没有接近我期望返回的数据。
有时 $countries 和/或 $category 只能有一个元素。
最佳答案
这是因为 PHP 数组的工作方式,您每次都在覆盖 terms
查询,而是尝试以下方式:
array(
'body' => array('query' =>
'bool' => array(
'must' => array(
array('terms' => array('country' => implode(' ', $countries))),
array('terms' => array('category' => implode(' ', $category))),
)
)
))
minimum_should_match
对查询的 must
子句没有用。
关于php - ElasticSearch 和在 PHP 中搜索多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818516/