【问题标题】:Lucene query result is not correct when running official demo运行官方demo时Lucene查询结果不正确
【发布时间】:2021-06-08 02:15:04
【问题描述】:

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

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

【问题讨论】:

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

标签: lucene


【解决方案1】:

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

示例代码使用StandardAnalyzer,而后者又使用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 使用文本文件,而不是二进制文件。是的,类文件将包含文本片段,但它们通常也包含不可打印的控制字符,这些字符不适合被索引。我认为索引结果可能因此而无法预测。


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

【讨论】:

    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多