一尘不染

Elasticsearch-EdgeNgram +高亮+ term_vector =错误高亮

elasticsearch

当我将分析器与Edgengram(最小= 3,最大= 7,前面)+ term_vector = with_positions_offsets一起使用时

使用具有text =“ CouchDB”的文档

当我搜索“ couc”时

我的重点是“ cou”而不是“ couc”


看来我的重点只是在最小匹配令牌“ cou”上,而我希望是在精确令牌(如果可能)上或至少在找到的最长令牌上。

无需使用term_vector = with_positions_offsets分析文本即可正常工作

删除perfomances的term_vector = with_positions_offsets有什么影响?


阅读 338

收藏
2020-06-22

共1个答案

一尘不染

当您term_vector=with_positions_offsets为特定字段设置时,这意味着您将为该字段存储每个文档的术语向量。

在突出显示时,术语向量允许您使用Lucene快速向量突出显示工具,它比标准突出显示工具快。原因是标准荧光笔没有任何快速的方法来突出显示,因为索引没有包含足够的信息(位置和偏移量)。它只能重新分析字段内容,截取偏移量和位置并根据该信息进行突出显示。这可能需要一段时间,尤其是对于长文本字段。

使用术语向量,您确实有足够的信息,不需要重新分析文本。不利之处是该指数的规模将显着增加。我必须补充一点,因为Lucene
4.2术语向量可以更好地压缩并以优化的方式存储。此外,还有新的PostingsHighlighter,它基于将偏移量存储在发布列表中的功能,该功能甚至需要更少的空间。

elasticsearch根据可用信息自动使用最佳方式进行突出显示。如果存储术语向量,它将使用快速向量荧光笔,否则使用标准荧光笔。在没有术语向量的情况下重新索引后,将使用标准荧光笔突出显示。它将较慢,但索引将较小。

关于ngram字段,所描述的行为很奇怪,因为快速矢量荧光笔应该对ngram字段有更好的支持,因此我希望得到完全相反的结果。

2020-06-22