【问题标题】:Lucene Search returning no results even if it shouldLucene Search 不返回任何结果,即使它应该返回
【发布时间】:2016-05-20 09:16:29
【问题描述】:

我正在创建一个 lucene 搜索应用程序,我使用了具有不同分析器和各自 indexSearcher 的 indexWriter 的多个实例,但即使我知道我已经索引了我正在搜索的特定单词,返回的搜索结果也是空的。

这是我的 SearchEngine 类构造函数

this.indexers = new ArrayList<StandardIndexer>();
    this.indexers.add(new StandardIndexer(new StandardAnalyzer()));
    this.indexers.add(new StandardIndexer(new EnglishStemAnalyzer()));
    this.indexers.add(new StandardIndexer(new KeywordAnalyzer()));
    this.indexers.add(new StandardIndexer(new EnglishSynonymAnalyzer()));
    this.indexers.add(new StandardIndexer(new EnglishSynonymStemAnalyzer()));
    this.indexers.add(new StandardIndexer(new EnglishSynonymKeywordAnalyzer()));
    this.searchers = new ArrayList<StandardSearcher>();
    for (StandardIndexer indexer : this.indexers) {
        this.searchers.add(new StandardSearcher(indexer));
    }

StandardIndexer 和 StandardSearcher 是我对 indexer 和 searcher 的实现,我们可以看到 indexer 的实例用于创建 indexSearcher,因此所使用的分析器的目录和类型也在 indexer 和 searcher 之间共享

【问题讨论】:

    标签: java search lucene


    【解决方案1】:

    您的问题是关于未知代码中的一个已知错误。

    所以我一般写:

    • 您必须使用“几乎”相同的分析器进行索引和搜索。所以最后索引中的标记(=词干后的词)必须与查询中的标记匹配。
    • 您必须确保提交已完成,然后才能搜索索引文档。
    • 请注意,标准查询解析器会在空格处拆分单词。如果没有额外的工作,您将无法搜索带有空格的标记(转义空格,使用短语搜索 ..)
    • 您可以使用luke查看您的索引目录https://github.com/DmitryKey/luke

    【讨论】:

    • 我已经检查了您上面提到的所有要点,在查询创建和搜索期间使用完全相同的分析器,每次写入后通过索引编写器提交。我还想补充一点,有时即使在得到结果之后,我也没有得到所有预期的结果。例如,我知道某个字符串出现在多个不同的文档中,但搜索只返回一个文档。
    • 请添加代码(例如基于 org.apache.lucene.search.TestBooleanOr):1.“添加两个带有单词 XY 的文档”,2.“搜索 XY”,3.仅查找一份文件。
    猜你喜欢
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多