【发布时间】:2013-10-24 12:08:32
【问题描述】:
在我们的网站中,我们使用 Lucene 查询来获取搜索结果。问题是我们有时会随机获得正确结果的子集。通常一切都很好。但是当你做一些事情比如调整搜索条件、改变排序等时,你会突然看到结果的一个子集(有时是 0 个结果)。如果您再次更改排序顺序,您将再次获得正确的结果,并且您可能再也看不到问题了。
有没有人遇到过这个问题并知道可能是什么原因造成的?可能是索引损坏还是索引负载过高?
我们使用的是 Lucene.Net 2.9.4.1。这是一个 Sitecore.NET 6.6.0 (rev. 130404) 项目。我们的索引只有不到 10000 个文档。
这是我们用来获取总结果计数的代码示例:
Index index = SearchManager.GetIndex("indexname");
using (IndexSearchContext searchContext = index.CreateSearchContext())
{
Lucene.Net.Search.IndexSearcher searcher = searchContext.Searcher;
TopScoreDocCollector collector = TopScoreDocCollector.create(1, false);
searcher.Search(query, collector);
return collector.GetTotalHits();
}
过去我们也有过this weird problem。这个问题通过 sitecore 提供的补丁来解决,该补丁可以检测到这一点并重置 Lucene 内部变量。不确定这些是否相关。
【问题讨论】:
-
你是在另一个线程中同时更新一些项目还是重建索引?
-
从技术上讲,当一个用户正在执行索引搜索时,系统的另一部分可能会发生发布,从而导致索引更新。索引更改可能每分钟发生多次。并行索引搜索每分钟可能发生数百次。
-
在 lucene 搜索中丢失单个结果可能是由 sitecore 中的 lucene 索引更新机制引起的 - 它从索引中删除现有项目,爬取新版本并添加回索引。删除旧项目和添加项目不在索引中的新项目之间存在差距。仍然不能解释根本不退货。
-
这也不是少了一件。如果实际计数是 1215,你会得到类似 413 的东西。完全随机。我还用我们过去遇到的另一个奇怪问题(现已解决)更新了我的问题。
标签: lucene sitecore lucene.net sitecore6