3

我正在使用最新版本的elasticsearch-php以及最新版本的 MongoDB 和 ElasticSearch。

我需要对可以包含一个或多个值的多个字段进行搜索。例子:

country_code 应为 NL、BE 或 DE AND 类别应包含 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只能有一个元素。

4

1 回答 1

5

这是因为 PHP 数组的工作方式,您terms每次都在覆盖查询,而是尝试以下方式:

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

minimum_should_matchmust对查询的子句没有用。

于 2013-12-28T19:47:42.397 回答