2014-05-02 76 views
0

我有lucene.net 2.9一个奇怪的问题: 如果我寻找:high-quality没有找到任何结果。我发现连字符字符( - )是一个Lucene的问题,所以我搜索high quality它完美地工作。Lucene的搜索数字的

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

第二方案是在第一与一个矛盾。 我想,因为我有一个数字文本,第二个是相关的,但我没有找到有关网络的东西。

+0

你能略低更具体到究竟你在做什么。你如何调用lucene?使用什么数据类型等等。 – CodeTower

+0

我有一些PDF索引。我检查了卢克,当我用卢克搜索时,我也遇到了同样的问题,如果我正在搜索的文本包含“减号字符”没有找到,并且文本包含数字后面跟着减号,再后面跟着数字被找到。 1)没有找到高质量; 2)发现高质量; 3)找到30-40; 4)未找到30 40 – user3596223

回答

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”时,“30-40”的TermQuery将完全匹配。但“30”和“40”都不会找到匹配项。

所以,我不是你如何查询运行为不匹配有(可能使用StandardAnalyzer当索引和WhitespaceAnalyzer查询时?),但希望在正确的方向点。

-1

你需要加密“ - ”登录URL参数。我认为它会正常工作。