如何在弹性搜索中获得整个索引的术语向量信息?,而不是在文档级别



根据弹性搜索文档,https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html,术语向量只能应用于文档。有什么方法可以在索引级别应用它吗。

我的用例是在应用英语停止词过滤器后,计算添加到索引的所有文档中的字段(类型:字符串,基本上是一个句子)中所有uni、bi和trigram的频率。

谢谢。

对于碎片中的所有文档,使用术语向量存储多个统计信息(为什么不索引?…继续阅读)。

  • 总术语频率(术语在所有文档中出现的频率)
  • 文档频率(包含当前术语的文档数)

若要实现此功能,必须为要分析的字段启用term_vector。最好在设置映射时将term_vector添加到字段定义中,因为计算是在索引时完成的,这会加快术语向量检索的速度。

然后,当检索术语向量时,只需添加"term_statistics"参数,ttf就会包含在输出中。参见此示例:

GET/twitter/_doc/1/termvectors{"fields":["text"],"offset":true,"payloads":true,《positions》:true,"term_statistics":true,"field_statistics":true}

但是,请注意,如果索引使用多个碎片,则term_vector和依赖于term_vectors的"更像这样"查询是不准确的。说不是这样!

术语和字段统计信息不准确。删除的文档没有考虑在内。仅检索请求的文档所在的shard。术语和字段统计信息因此仅作为相对度量有用,而绝对在这种情况下,数字没有任何意义。

如果你想要准确的统计数据,你必须将索引设置为单个碎片,这违背了使用弹性搜索的目的,因为你不能对单个碎片进行聚类。另一个Stackoverflow提交者陷入了这个陷阱。如果有人知道解决方案,请发帖。

最新更新