Zte*_*eve 15 java lucene indexing escaping character
我在使用包含" - "字符的索引单词的Lucene索引时遇到问题.
它适用于包含" - "的一些单词,但不适用于所有单词,我找不到原因,为什么它不起作用.
我正在搜索的字段被分析并包含带有和不带" - "字符的单词的版本.
我正在使用分析器:org.apache.lucene.analysis.standard.StandardAnalyzer
这里有一个例子:
如果我搜索"gsx-*"我得到一个结果,索引字段包含"SUZUKI GSX-R 1000 GSX-R1000 GSXR"
但如果我搜索"v-*",我就没有结果.预期结果的索引字段包含:"SUZUKI DL 1000 V-STROM DL1000V-STROMVSTROM V STROM"
如果我搜索没有"*"的"v-strom"它可以工作,但如果我只是搜索"v-str",例如我没有得到结果.(应该有一个结果,因为它是用于网上商店的实时搜索)
那么,2个预期结果之间有什么区别?为什么它适用于"gsx- "而不适用于"v- "?
Mar*_*nik 16
我相信,StandardAnalyzer会将连字符视为空格.因此,原来你查询"gsx-*"到"gsx*",并"v-*"为没有因为也消除了单字母标记.您在搜索结果中看到的字段内容是字段的存储值,它完全独立于为该字段编制索引的字词.
所以你想要的是"v-strom"作为一个整体成为一个索引术语.StandardAnalyzer不适合这种文字.也许和WhitespaceAnalyzeror 一起去吧SimpleAnalyzer.如果仍然没有削减它,你也可以选择将你自己的分析器放在一起,或者只是从那两个开始,并进一步组合它们TokenFilters.Lucene Analysis软件包Javadoc给出了一个非常好的解释.
BTW没有必要输入索引中的所有变体,如V-strom,V-Strom等.这个想法是让同一个分析器在索引和解析查询时将所有这些变体规范化为相同的字符串.