【问题标题】:ElasticSearch and searching on multiple fields in PHPElasticSearch 和在 PHP 中搜索多个字段
【发布时间】:2014-01-16 02:20:39
【问题描述】:

我正在使用最新版本的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

标签: php mongodb elasticsearch elasticsearch-plugin


【解决方案1】:

这是因为 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 子句无用。

【讨论】:

  • “您每次都在覆盖术语查询” - 如此明显。谢谢@Sammaye。
  • 作为旁注: array('country' => implode(' ', $countries)) 似乎不起作用,但 array('country' => $countries) 很好。
  • @MarcWitteveen 很高兴知道:)
  • 是否可以在那里指定一个数组而不使其内爆?
  • @HappyCoder 我不这么认为,这是让我对 ES 感到困惑的事情之一:您不能通过它自己的架构的结构进行查询,除此之外
猜你喜欢
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2021-12-06
  • 2013-08-13
  • 1970-01-01
相关资源
最近更新 更多