我对lucene.net 2.9有一个奇怪的问题:
如果我搜索:high-quality
,则无法找到任何结果。我发现连字符char( - )对Lucene来说是一个问题,因此我搜索high quality
并且它工作得很好。
当我搜索30-40
时,它会显示结果,但30 40
没有显示任何结果。
第二种情况与第一种情况相矛盾。 我猜第二个是相关的,因为我有数字文本,但我没有找到与网络相关的东西。
答案 0 :(得分:0)
我猜测你在为你的术语编制索引时正在使用StandardAnalyzer
,然后在没有以某种形式进行分析或使用不同形式的分析进行搜索。
2.9 StandardAnalyzer
(ClassicAnalyzer
,从版本3.1开始)在连字符周围有一些有趣的行为。引用StandardTokenizer
documentation:
使用连字符拆分单词,除非令牌中有数字,在这种情况下,整个令牌被解释为产品编号而不会被拆分。
因此,两个带连字符的单词(或任何字母集合)将被拆分为单独的标记,当混合中的任何数字将整个事物解释为产品编号,索引作为单个标记,连字符和所有,这样:
所以,如果你为"高质量"构建TermQuery
在这样的分析字段中,您将得不到任何结果(尽管如果使用具有相同分析器的QueryParser
,您将会得到)。搜索" 30-40"时,TermQuery
为" 30-40"将完全匹配。但是对于#34; 30"也不是" 40"。
所以,我不是你如何在那里遇到不匹配的问题(在编制索引时可能使用StandardAnalyzer
,在查询时可能使用WhitespaceAnalyzer
),但希望右边有点方向。
答案 1 :(得分:-1)
您需要加密“ - ”符号到URL参数。我认为它会正常工作。