Lucene搜索数值

时间:2014-05-02 12:36:35

标签: lucene.net lucene

我对lucene.net 2.9有一个奇怪的问题: 如果我搜索:high-quality,则无法找到任何结果。我发现连字符char( - )对Lucene来说是一个问题,因此我搜索high quality并且它工作得很好。

当我搜索30-40时,它会显示结果,但30 40没有显示任何结果。

第二种情况与第一种情况相矛盾。 我猜第二个是相关的,因为我有数字文本,但我没有找到与网络相关的东西。

2 个答案:

答案 0 :(得分:0)

我猜测你在为你的术语编制索引时正在使用StandardAnalyzer,然后在没有以某种形式进行分析或使用不同形式的分析进行搜索。

2.9 StandardAnalyzerClassicAnalyzer,从版本3.1开始)在连字符周围有一些有趣的行为。引用StandardTokenizer documentation

  

使用连字符拆分单词,除非令牌中有数字,在这种情况下,整个令牌被解释为产品编号而不会被拆分。

因此,两个带连字符的单词(或任何字母集合)将被拆分为单独的标记,当混合中的任何数字将整个事物解释为产品编号,索引作为单个标记,连字符和所有,这样:

  • "高育人质量" - > "高"和"质量"
  • " AB-CD" ---------> " AB"和" cd"
  • " 30-40" ---------> " 30-40"
  • " AB-C4" ---------> " AB-C4"
  • " 30 40" ---------> " 30"和" 40"

所以,如果你为"高质量"构建TermQuery在这样的分析字段中,您将得不到任何结果(尽管如果使用具有相同分析器的QueryParser,您将会得到)。搜索" 30-40"时,TermQuery为" 30-40"将完全匹配。但是对于#34; 30"也不是" 40"。

所以,我不是你如何在那里遇到不匹配的问题(在编制索引时可能使用StandardAnalyzer,在查询时可能使用WhitespaceAnalyzer),但希望右边有点方向。

答案 1 :(得分:-1)

您需要加密“ - ”符号到URL参数。我认为它会正常工作。