【问题标题】:How to wrap an ElasticSearch filter in a query如何在查询中包装 ElasticSearch 过滤器
【发布时间】:2016-04-30 01:06:21
【问题描述】:

为了在 ElasticSearch 中使用percolator,我需要对搜索查询进行索引。但是,我们主要使用过滤器进行搜索。为了索引这些过滤器,它们必须是wrapped inside a query

我知道实现此目的的两种不同方法。将过滤器包裹在filtered query

{
  "query": {
    "filtered": {
      "filter": { ... }
    }
  }
}

或使用constant_score query

{
  "query": {
    "constant_score": {
      "filter": { ... }
    }
  }
}

首选哪种方法?为什么?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    虽然两者都会产生相同的结果,并且性能应该非常接近,但我更喜欢使用filtered-query。它非常清楚地传达了意图。几个月后,您可能会从同一个查询开始,并想知道您为什么关心分数。 :)

    【讨论】:

    • 我同意filtered-query 更好地说明了目的。关于性能,您认为两者应该具有相似性能的依据是什么?
    • 一个带有match_all-query(或没有查询)的Elasticsearch filtered-query,实际上是使用XConstantScoreQuery进行评估的。
    【解决方案2】:

    根据link,“带有 match_all 查询的过滤查询会在内部自动转换为 constant_score ”。所以听起来最好的选择是使用constant_score 并省略内部步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      相关资源
      最近更新 更多