运行官方demo时Lucene查询结果不正确

Lucene query result is not correct when running official demo

我尝试了 运行 IndexFiles 的 Lucene 官方演示,参数 -index . -docs . ,控制台打印包括 pom.xml 和 *.java 和 *.class 被添加到索引中。

然后我用参数 -index . -query "lucene AND main" 尝试 SearchFiles,控制台只打印 IndexFiles.class 和 SearchFiles.class 和 IndexFiles.java,但不打印 SearchFiles.java (我认为应该是搜索结果之一)。

您的搜索结果是正确的(至少 .java 个文件)。

示例代码使用了StandardAnalyzer which, in turn, uses the StandardTokenizer.

StandardTokenizer 使用 this document 中描述的规则将输入文本拆分为标记。例如,从该文档的第 4 节:

当源文件中有如下文本时

org.apache.lucene.analysis.Analyzer

这被标记为单个标记。没有单词边界。

查看IndexFiles.java源文件,有如下文字:

demonstrating simple Lucene indexing

这被标记为 4 个单独的标记。

但是在 SearchFiles.java 源文件中,文本“lucene”只出现在诸如 org.apache.lucene.analysis.Analyzer 的文本中 - 因此从未创建单个标记 lucene

因此,您的查询未在 IndexFiles.java 文档中找到任何匹配项,因为该查询完全匹配标记。两个源文件都包含“main”一词,但只有一个包含“lucene”一词。


对于.class文件,因为这些是编译后的字节码文件,我会说它们一开始就不应该被索引。 Lucene 使用文本文件,而不是二进制文件。是的,class 文件将包含文本片段,但它们通常也会包含不可打印的控制字符,这些字符不适合被索引。我认为索引结果可能因此无法预测。


您可以使用 Luke 浏览索引数据 - 捆绑在二进制版本中: