java - Elasticsearch - EdgeNgram + highlight + term_vector = 不好的亮点

标签 java search lucene elasticsearch n-gram

当我使用带有 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 时,这意味着您正在为该字段存储每个文档的术语 vector 。

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

使用术语 vector ,您可以获得足够的信息,无需重新分析文本。缺点是索引的大小,它会显着增加。我必须补充一点,因为 Lucene 4.2 术语 vector 被更好地压缩并以优化的方式存储。还有新的 PostingsHighlighter,它基于在帖子列表中存储偏移量的能力,这需要更少的空间。

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

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

关于java - Elasticsearch - EdgeNgram + highlight + term_vector = 不好的亮点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303660/

相关文章:

api - YouTube API v3搜索-不返回所有视频

c# - 使用 LIKE 谓词的 Sharepoint 2010 FullTextSqlQuery 找不到任何内容

java - 与 lucene 索引一起使用的最佳跨语言分析器

java - 如何从 Lucene 的特定字段中获取唯一术语列表?

lucene - 如何获得Solr/lucene中的总匹配数

java - 有什么方法可以自动覆盖 NetBeans 中的方法吗?

java - 如何在不知道文件扩展名的情况下获取图像类型?

java - 使用 json 时应该使用哪些 jar 库

Java while循环异常

java - 如何在没有 @Override 注释的情况下找到所有覆盖父类(super class)/接口(interface)方法的方法?