一尘不染

获取整个索引中的总词频(Elasticsearch)

elasticsearch

我正在尝试计算特定术语在整个索引中出现的总次数(术语收集频率)。我试图通过使用术语向量来做到这一点,但是这仅限于单个文档。即使在指定文档中存在术语的情况下,响应似乎也达到了某个doc_count(在field_statistics之内)的最大值,这使我怀疑其准确性。

请求:

http://myip:9200/clinicaltrials/trial/AVmk-ky6XMskTDwIwpih/_termvectors?term_statistics=true

尽管术语统计不应该特定于文档,但此处使用的文档ID为“ AVmk-ky6XMskTDwIwpih”。

响应:

这是我对以下领域之一的术语“癌症”的理解:

 "cancer" : {
      "doc_freq" : 5297,
      "ttf" : 10587,
      "term_freq" : 1,
      "tokens" : [
        {
          "position" : 15,
          "start_offset" : 115,
          "end_offset" : 121
        }
      ]
    },

如果将所有字段的ttf总计,则得到18915。但是,“ cancer”的实际总术语频率实际上是542829。这使我相信,它将term_vector
stats限制为索引中文档的子集。

这里的任何建议将不胜感激。


阅读 659

收藏
2020-06-22

共1个答案

一尘不染

计数不同的原因是,除非所讨论的索引具有单个分片,否则术语向量是不准确的。对于具有多个分片的索引,文档分布在所有分片上,因此返回的频率不是总数,而是来自随机选择的分片的频率。

因此,返回的频率只是一个相对的度量,而不是您期望的绝对值。请参阅“行为”部分。为了测试这一点,您可以创建一个分片索引并请求频率(它应该给您实际的总数)。

2020-06-22