获取整个索引的总术语频率(Elasticsearch)

lia*_*mjc 14 information-retrieval elasticsearch

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

请求:

http://myip:9200/clinicaltrials/trial/AVmk-ky6XMskTDwIwpih/_termvectors?term_statistics=true
Run Code Online (Sandbox Code Playgroud)

这里使用的文档ID是"AVmk-ky6XMskTDwIwpih",尽管术语统计不应该特定于文档.

响应:

这就是我对其中一个领域的"癌症"一词所得到的:

 "cancer" : {
      "doc_freq" : 5297,
      "ttf" : 10587,
      "term_freq" : 1,
      "tokens" : [
        {
          "position" : 15,
          "start_offset" : 115,
          "end_offset" : 121
        }
      ]
    },
Run Code Online (Sandbox Code Playgroud)

如果我总计所有字段的ttf,我得到18915.但是,"癌症"的实际总术语频率实际上是542829.这使我相信它将term_vector统计数据限制为索引中的文档子集.

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

小智 6

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

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


gro*_*roo 5

我相信您需要根据elasticsearch 文档将term_statistics设置为true :

术语统计将term_statistics设置为true(默认为false)将返回

总术语频率(一个术语在所有文档中出现的频率)

文件频率(包含当前术语的文件数)

默认情况下,由于期限统计信息可能会对性能产生严重影响,因此不会返回这些值。