Lucene:不停地搜索不会返回结果

时间:2014-03-03 04:31:22

标签: lucene

我正在使用Lucene.net 3.0.3而且我不明白停止词应该如何在查询中起作用。

我将此文字作为输入:Stop the word

我使用StandardAnalyzer(Version.LUCENE_30)进行索引和查询。索引有一个字段Title

该字段设置为存储和分析。我也玩过不同的TermVector。 对于查询解析,我使用简单的QueryParser.Parse和

这就是问题所在:

  • 查询Title:stop the word会返回文档 - 这很好
  • Title:stop word的查询不会返回文档 - 因为从索引中删除了停用词,所以我期待它。

然后我切换到LUCENE_24,第二个查询实际上返回了文档。

我知道停止词会从索引中删除,可能是从查询中删除,但似乎我错过了一些基本的东西。

1 个答案:

答案 0 :(得分:0)

虽然在分析过程中确实删除了该单词,但看起来2.9之后的默认行为是启用位置增量。因此,虽然单词被删除并且不会对分数有所贡献,但在短语查询中,预期“停止”和“单词”将在它们之间具有(删除)术语。在Lucene 2.4中,此功能已存在,但默认情况下已关闭。您可以在StopFilter.getEnablePositionIncrementsVersionDefault

的实现中看到这一点
public static boolean getEnablePositionIncrementsVersionDefault(Version matchVersion) {
    return matchVersion.onOrAfter(Version.LUCENE_29);
}

例如,如果您尝试搜索“停止进入单词”,我预计您会看到版本3.0的命中。

PositionIncrementAttribute documentation简要提出了这个想法:

  

将其设置为大于1的值以禁止精确的词组匹配。例如,如果一个人不希望短语在删除的停用词之间匹配,那么可以建立一个停用词过滤器来删除停用词,并将增量设置为在每个不停止词之前删除的停用词的数量。然后,精确的短语查询将仅在术语出现时匹配,而不会插入中间停用词。