Lucene索引中“-”字符的问题

2024-01-09

我在使用 Lucene 索引时遇到问题,该索引已索引包含“-”字符的单词。

它适用于某些包含“-”的单词,但不适用于所有单词,我找不到它不起作用的原因。

我正在搜索的字段经过分析并包含带有和不带有“-”字符的单词版本。

我正在使用分析器:org.apache.lucene.analysis.standard.StandardAnalyzer

这是一个例子:

如果我搜索“gsx-*”我得到一个结果,索引字段包含 “铃木 GSX-R 1000 GSX-R1000 GSXR”

但如果我搜索“v-*”我没有结果。预期结果的索引字段包含: “铃木 DL 1000 V-STROM DL1000V-STROMVSTROM V STROM”

如果我搜索不带“*”的“v-strom”,它会起作用,但如果我只搜索“v-str”,则我不会得到结果。 (应该有结果,因为它是针对网上商店的实时搜索)

那么,这两个预期结果有什么区别呢?为什么它适用于“gsx-” 但不适合“v-" ?


我相信,StandardAnalyzer 会将连字符视为空格。所以它改变了你的查询"gsx-*" into "gsx*" and "v-*"变成空无一物,因为 at 也消除了单字母标记。您在搜索结果中看到的字段内容是该字段的存储值,它完全独立于为该字段建立索引的术语。

所以你想要的是“v-strom”作为一个整体成为一个索引术语。StandardAnalyzer不适合这种类型的文本。也许可以尝试一下WhitespaceAnalyzer or SimpleAnalyzer。如果这仍然不能解决问题,您还可以选择将自己的分析器组合在一起,或者只是开始这两个分析器并进一步组合它们TokenFilters。给出了很好的解释Lucene 分析包 Javadoc。 http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/analysis/package-summary.html

顺便说一句,无需在索引中输入所有变体,例如 V-strom、V-Strom 等。其想法是让同一个分析器在索引中和解析查询时将所有这些变体标准化为同一字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lucene索引中“-”字符的问题 的相关文章

随机推荐