Elasticsearch - EdgeNgram +高亮+ term_vector =坏亮点(

2019-07-30 05:19发布

当我使用的分析仪edgengram(分= 3,最大= 7,前面)+ term_vector = with_positions_offsets

对于具有文本文档=“CouchDB的”

当我搜索“couc”

我的亮点是在“凑”,而不是“couc”


看来我的亮点是仅在最小匹配令牌“腠理”,而我希望是确切的令牌(如果可能)或至少最长的令牌中。

它正常工作而不term_vector = with_positions_offsets分析文本

什么是去除term_vector = with_positions_offsets为perfomances的影响?

Answer 1:

当设置term_vector=with_positions_offsets特定字段就意味着要存储每文档中,术语载体,该字段。

当谈到突出,长期向量允许您使用Lucene的快速矢量荧光笔,比标准的荧光笔更快。 其原因是,标准的荧光笔不具有任何快速的方式来突出以来,该指数不包含足够的信息(位置和偏移量)。 它只能重新分析字段内容,拦截偏移量和位置,并根据这些信息突出。 这可能需要相当长的时间,尤其是长文本字段。

使用词向量你有足够的信息,不需要再对文本进行分析。 不足之处是该指数,这将显着增加的大小。 我要补充的是,由于Lucene的4.2项向量是更好的压缩和存储优化的方式虽然。 还有还有基于存储偏移量的贴子列表中,这需要更少空间的能力的新PostingsHighlighter。

elasticsearch自动使用能够基于现有的信息突出显示的最佳方式。 如果存储了长期的载体,它会使用快速矢量荧光笔,否则标准之一。 当你不重新索引词条向量,高亮会使用标准的荧光笔进行。 这将是慢,但该指数会更小。

对于NGRAM领域,所描述的行为是奇怪的,因为快速向量高亮应该有NGRAM领域提供更好的支持,因此我希望完全相反的结果。



Answer 2:

我知道这个问题是旧的,但它没有完全回答:

还有另一种选择,可以产生这样一个奇怪的现象:

你必须设置require_field_matchtrue ,如果你不想要的文件应该影响当前文档高亮,其他结果,请参见: http://www.elasticsearch.org/guide/reference/api/search/highlighting/



文章来源: Elasticsearch - EdgeNgram + highlight + term_vector = bad highlights