我正在创建一个 lucene 搜索应用程序,我将 indexWriter 的多个实例与不同的分析器和各自的 indexSearcher 一起使用,但是返回的搜索结果是空的,即使我知道我已经为我正在搜索的特定单词建立了索引。
这是我的 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 是我对索引器和搜索器的实现,我们可以看到索引器的实例用于创建 indexSearcher,因此所使用的目录和分析器类型也在索引器和搜索器对之间共享
最佳答案
您的问题是关于未知代码中的已知错误。
所以我一般这样写:
- 您必须使用“几乎”相同的分析器进行索引和搜索。所以最终索引中的标记(=词干提取后的词)必须与查询中的标记相匹配。
- 您必须确保提交已完成,然后才能搜索索引文档。
- 请注意,标准查询解析器会在空格处拆分单词。如果没有额外的工作,您无法搜索带有空格的标记(转义空格,使用短语 .. 搜索)
- 您可以使用 luke 查看您的索引目录 https://github.com/DmitryKey/luke
关于java - Lucene Search 不返回任何结果,即使它应该返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35308114/