Elasticsearch – EdgeNgram + highlight + term_vector =错误的亮点
当我使用带有edgengram的分析器(min = 3,max = 7,front)+ term_vector = with_positions_offsets
使用text =“CouchDB”的文档
当我搜索“couc”时
我的亮点是“cou”而不是“couc”
似乎我的亮点仅在于最小匹配标记“cou”,而我期望在确切的标记(如果可能)或至少找到最长的标记。
它使用term_vector = with_positions_offsets分析文本时工作正常
删除term_vector = with_positions_offsets的性能有什么影响?
为特定字段设置term_vector=with_positions_offsets
,表示您为该字段存储每个文档的术语向量。
在突出显示时,术语向量允许您使用lucene快速矢量荧光笔,这比标准荧光笔更快。 原因是标准荧光笔没有任何快速突出的方法,因为索引不包含足够的信息(位置和偏移)。 它只能重新分析字段内容,拦截偏移和位置,并根据该信息进行突出显示。 这可能需要相当长的时间,特别是对于长文本字段。
使用术语向量,您可以获得足够的信息,而无需重新分析文本。 不利方面是指数的规模,这将显着增加。 我必须补充一点,因为Lucene 4.2术语向量可以更好地压缩并以优化的方式存储。 还有新的PostingsHighlighter基于在贴子列表中存储偏移的能力,这需要更少的空间。
elasticsearch自动使用最佳方式根据可用信息进行突出显示。 如果存储术语矢量,它将使用快速矢量荧光笔,否则使用标准矢量荧光笔。 在没有术语矢量的重新索引之后,将使用标准荧光笔进行突出显示。 它会慢一些,但索引会更小。
关于ngram字段,所描述的行为很奇怪,因为快速矢量荧光笔应该对ngram字段有更好的支持,因此我期望完全相反的结果。
我知道这个问题已经过时了,但还没有完全回答:
还有另一种选择可以产生这种奇怪的行为:
如果您不希望其他文档结果影响当前文档突出显示,则必须将require_field_match
设置为true
,请参阅: http : //www.elasticsearch.org/guide/reference/api/search/highlighting/
- ElasticSearch一个edgeNGram用于自动完成\ typeahead,是我的search_analyzer被忽略
- Spring-Data-Elasticsearch设置:Spring无法找到配置文件?
- Elasticsearch的Liquibase或Flyway数据库迁移替代方案
- 实现twitter和facebook就像hashtags一样
- 为什么我不能通过Java API连接到ElasticSearch?
- elasticsearch java API:matchAll搜索查询不返回结果?
- 将弹性搜索从1.4.3迁移到2.4 java代码
- ElasticSearch和Java环境变量
- 将数据从Oracle /关系表索引到弹性搜索的更好方法是什么?