Elasticsearch 重要术语聚合 doc_count 与对同一术语进行匹配短语搜索时的命中数不同

问题描述

我正在使用重要术语聚合,它使用以下查询为我提供了 n 个重要术语及其 doc_count 和 bg_c​​ount:

getValue(this)

如果我使用重要术语聚合返回的术语并对该术语进行匹配短语查询。然后我得到了与聚合中的 doc_count 不同的命中值。

匹配词组查询

this.checked

字段 { "query" : { "terms" : {"user_id": ["x"]} },"aggregations" : { "word_cloud" : { "significant_terms": { "field" : "transcript.results.alternatives.words.word.keyword","size": 200 } } },"size": 0 } 具有以下映射:

{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "preprocess_data.results.alternatives.transcript": "<term>"
          }
        },{
          "match_phrase": {
            "user_id": "x"
          }
        }
      ]
    }
  },"from": 0,"size": 22
}

在进行聚合和匹配短语搜索时,我无法解释文档计数的差异。请帮忙。

解决方法

这种行为是因为有关 doc_count 的数据是从索引的所有分片中获取的,并且在重要术语聚合的情况下,此数据可能是近似值。引用弹性搜索documentation

包含结果中提供的术语的文档数 基于对从每个分片返回的样本求和,因此 可能是:

  • 如果某些分片未在其顶级样本中提供给定术语的数字,则为低
  • 在考虑背景频率时很高,因为它可能会计算已删除文档中的出现次数

与大多数设计决策一样,这是权衡的基础,其中 我们选择以一些代价提供快速的性能 (通常很小)不准确。但是,大小和分片大小 下一节中介绍的设置提供了帮助控制 准确度

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...