Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lucene搜索不返回任何结果,即使它应该返回_Java_Search_Lucene - Fatal编程技术网

Java Lucene搜索不返回任何结果,即使它应该返回

Java Lucene搜索不返回任何结果,即使它应该返回,java,search,lucene,Java,Search,Lucene,我正在创建一个lucene搜索应用程序,我使用了indexWriter的多个实例,使用了不同的分析器和各自的indexSearcher,但是返回的搜索结果是空的,尽管我知道我已经为正在搜索的特定单词编制了索引 这是我的搜索引擎类构造函数 this.indexers = new ArrayList<StandardIndexer>(); this.indexers.add(new StandardIndexer(new StandardAnalyzer())); thi

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

这是我的搜索引擎类构造函数

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));
    }
this.indexers=new ArrayList();
this.indexers.add(新标准索引器(新标准分析器());
this.indexers.add(新的标准索引器(新的EnglishTempAnalyzer());
添加(新的标准索引器(新的关键字分析器());
this.indexers.add(新标准索引器(新英语语法分析器());
this.indexers.add(新的StandardIndexer(新的EnglishSynonymStemAnalyzer());
this.indexers.add(新的标准索引器(新的EnglishSynonymKeywordAnalyzer());
this.searchers=newarraylist();
for(StandardIndexer索引器:this.indexer){
this.searchers.add(新的标准搜索器(索引器));
}

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

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

所以我一般写:

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

我已经检查了您上面提到的所有要点,在查询创建和搜索期间使用了完全相同的分析器,在每次通过索引编写器写入后提交。我还想补充一点,有时即使在获得结果之后,我也没有得到所有预期的结果。例如,我知道一些字符串出现在多个不同的文档中,但搜索仅返回其中一个文档。请为以下内容添加代码(例如基于org.apache.lucene.search.TestBooleanOr):1。“使用单词XY添加两个文档”,2。“搜索XY”,3。仅查找一个文档。