Sha*_*arb 8 lucene search lucene.net full-text-search
我正在使用雪球分析仪来阻止多个文档的标题.一切都运作良好,但他们是一些怪癖.
例:
搜索"valv","valve"或"valve"会返回相同数量的结果.这是有道理的,因为雪球分析仪将所有内容减少到"valv".
使用通配符时遇到问题.搜索"valve*"或"valve*"不会返回任何结果.搜索"valv*"按预期工作.
我理解为什么会这样,但我不知道如何解决它.
我想过编写一个存储词干和非词干标记的分析器.基本上应用两个分析器并组合两个令牌流.但我不确定这是否是一个实用的解决方案.
我还考虑过使用AnalyzingQueryParser,但我不知道如何将它应用于多字段查询.此外,使用AnalyzingQueryParser会在搜索"valve*"时返回"valve"的结果,这不是预期的行为.
是否有一种利用通配符和词干算法的"首选"方式?
之前我用过2种不同的方法来解决这个问题
使用两个字段,一个包含词干项,另一个包含由say,the生成的词StandardAnalyzer.解析搜索查询时,如果在"标准"字段中进行通配符搜索,则不使用带有词干术语的字段.如果您让用户直接在Lucene的QueryParser中输入查询,则可能更难使用.
编写自定义分析器和索引重叠标记.它主要包括使用索引将原始术语和词干索引在索引中的相同位置PositionIncrementAttribute.您可以查看SynonymFilter以获取如何PositionIncrementAttribute正确使用它的一些示例.
我更喜欢解决方案#2.