elasticsearch,elastica,Php,elasticsearch,Elastica" /> elasticsearch,elastica,Php,elasticsearch,Elastica" />

Php Elastica:如何进行过滤查询

Php Elastica:如何进行过滤查询,php,elasticsearch,elastica,Php,elasticsearch,Elastica,我正在尝试按类别实现一个组,在ElasticSearch中,location\u country='CA'和location\u province='ON' { "aggs": { "categories": { "terms": { "field": "categories.slug", "order": { "_term": "asc" }, "size": 1000 }

我正在尝试按类别实现一个组,在ElasticSearch中,location\u country='CA'和location\u province='ON'

{
  "aggs": {
    "categories": {
      "terms": {
        "field": "categories.slug",
        "order": {
          "_term": "asc"
        },
        "size": 1000
      }
    }
  },
  "query": {
    "filtered": {
      "filter": [
        {
          "term": {
            "locations.country": "CA"
          }
        },
        {
          "term": {
            "locations.administrative_area_level_1": "QC"
          }
        }
      ]
    }
  }
}

如何使用elastica实现此查询?

经过反复试验后,这里介绍了如何实现此查询

    //Aggregation Terms
    $termsAgg = new \Elastica\Aggregation\Terms("categories");
    $termsAgg->setField("categories.slug");
    $termsAgg->setOrder("_term", "asc");
    $termsAgg->setSize(1000);

    //Boolean Filter
    $boolFilter = new \Elastica\Filter\BoolFilter();
    foreach ($this->locationSearchFilter as $key => $value) {
        $boolFilter->addMust(new \Elastica\Filter\Term([$key => $value]));
    }

    //Filter
    $filter  = new \Elastica\Query\Filtered();
    $filter->setFilter($boolFilter);

    //Client
    $client = new \Elastica\Client([
        'connections' => [
            array('host' => 'localhost', 'port' => 9200),
        ],
    ]);

    //Search
    $search = new \Elastica\Search($client);
    $search->addType('yourType');
    $search->addIndex('yourIndex');

    //Query
    $query = new \Elastica\Query();
    $query->addAggregation($termsAgg);
    $query->setQuery($filter);

我总是对一些插件如何使需要两行代码的基本php函数复杂化感到惊讶。。。但如果它有效的话,那就太好了!!弹性搜索5中不推荐使用筛选的查询。你能给最新的ES添加什么样的内容吗?@Wouter你可能想看看,而我仍然使用ELasticSearch 2.3