4

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

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

谢谢。

4

1 回答 1

3

使用术语向量为分片中的所有文档存储几个统计信息(为什么不索引?...继续阅读)。

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

要使其工作,您必须为要分析的字段启用 term_vectors。这最好通过在设置映射时将 term_vectors 添加到字段定义中来完成,因为计算是在索引时完成的,这样可以加快术语向量检索。

然后在检索术语向量时,只需添加“term_statistics”参数,并且 ttf 将包含在输出中。看这个例子:

GET /twitter/_doc/1/_termvectors { “fields”:[“text”],“offsets”:true,“payloads”:true,“positions”:true, “term_statistics”:true, “field_statistics”:true }

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

术语和字段统计数据不准确。不考虑已删除的文档。仅针对请求的文档所在的分片检索信息。因此,术语和字段统计信息仅用作相对度量,而绝对数字在此上下文中没有任何意义。

如果您想要准确的统计信息,您必须将索引设置为单个分片,这违背了使用弹性搜索的目的,因为您无法聚集单个分片。另一个 Stackoverflow 提交者落入了这个陷阱。如果有人知道解决方案,请发布。

于 2018-12-10T18:37:42.543 回答