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

运行官方演示时Lucene查询结果不正确,lucene,Lucene,我用参数-index运行Lucene官方演示-医生,控制台打印(包括pom.xml和*.java和*.class)被添加到索引中 然后我尝试使用参数-index-查询“lucene AND main”,console只打印IndexFiles.class和SearchFiles.class和IndexFiles.java,而不打印SearchFiles.java(我认为它应该是搜索结果之一)。您的搜索结果是正确的(至少对于.java文件) 示例代码使用,后者反过来使用 StandardToken

我用参数
-index运行Lucene官方演示-医生,控制台打印(包括pom.xml和*.java和*.class)被添加到索引中


然后我尝试使用参数
-index-查询“lucene AND main”
,console只打印IndexFiles.class和SearchFiles.class和IndexFiles.java,而不打印SearchFiles.java(我认为它应该是搜索结果之一)。

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

示例代码使用,后者反过来使用

StandardTokenizer
使用中描述的规则将输入文本拆分为标记。例如,该文件第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使用文本文件,而不是二进制文件。是的,类文件将包含文本片段,但它们通常还包含不可打印的控制字符,这些字符不适合编制索引。我认为索引结果可能因此而不可预测


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


当您使用命令行上的
-query
标志运行演示时,我想您只会看到前10个结果-是这样吗?在输出的顶部附近应该有一行告诉您找到了多少匹配的文档-这个数字是多少?@andrewjames结果少于10。