Lucene 没有优化会导致错误的搜索结果

Lucene 没有优化会导致错误的搜索结果,lucene,solr,Lucene,Solr,我刚从我的前同事那里接管了solr/lucene的工作。但是有一个奇怪的错误 如果数据导入后没有优化,实际上如果有多个段文件,那么搜索结果就会出错。我们正在使用定制的solr searchComponent。就我对lucene的了解而言,优化不应该影响搜索结果。我怀疑这可能与多线程或未关闭的搜索器/读取器或其他相关 有人能帮忙吗?谢谢。这还是个猜测。我发现自定义搜索组件使用了一个自定义lucene过滤器。在该过滤器中,针对过滤器查询调用solrindexearcher.search。很有可能这就

我刚从我的前同事那里接管了solr/lucene的工作。但是有一个奇怪的错误

如果数据导入后没有优化,实际上如果有多个段文件,那么搜索结果就会出错。我们正在使用定制的solr searchComponent。就我对lucene的了解而言,优化不应该影响搜索结果。我怀疑这可能与多线程或未关闭的搜索器/读取器或其他相关


有人能帮忙吗?谢谢。

这还是个猜测。我发现自定义搜索组件使用了一个自定义lucene过滤器。在该过滤器中,针对过滤器查询调用solrindexearcher.search。很有可能这就是该死的原因


这可能是对熟悉lucene的人的一个提示。

发现了一篇有趣的帖子,其中提到了过滤器、片段等。我认为我非常接近事实。在搜索组件的过程中,将调用lucene.indexsearch.search,而不是solr的搜索。如果我用solr的搜索替换该搜索,那么结果将是正确的。因此,我现在的任务是重写代码以使用solrs(旧代码使用lucene搜索返回的文档)。现在我很确定发生了什么。SolrIndexSearcher.getDocSet在我们的过滤器中被调用,但是这个getDocSet将扫描整个索引,这意味着所有的段,而过滤器在每个段上被调用。这意味着,如果有8段,将有8*8次扫描。还请记住,在过滤器中,文档id是在段中维护的。所以,当你想编写自定义lucene过滤器时,要注意这一点。