运行官方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 浏览索引数据 - 捆绑在二进制版本中:
我尝试了 运行 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 浏览索引数据 - 捆绑在二进制版本中: