【发布时间】:2012-11-22 00:24:33
【问题描述】:
我认识到这是网络数据库上的一个有争议的问题,所以这个问题适用于主数据库......
我在 Sitecore 6.4.1 中设置了一个自定义索引,如下所示:
<index id="search_content_US" type="Sitecore.Search.Index, Sitecore.Kernel">
<param desc="name">$(id)</param>
<param desc="folder">_search_content_US</param>
<Analyzer ref="search/analyzer" />
<locations hint="list:AddCrawler">
<search_content_home type="Sitecore.Search.Crawlers.DatabaseCrawler, Sitecore.Kernel">
<Database>master</Database>
<Root>/sitecore/content/usa home</Root>
<Tags>home content</Tags>
</search_content_home>
</locations>
</index>
我这样查询索引(我正在使用 techphoria414 的 SortableIndexSearchContext 来自这个答案:How to sort/filter using the new Sitecore.Search API):
private SearchHits GetSearchResults(SortableIndexSearchContext searchContext, string searchTerm)
{
CombinedQuery query = new CombinedQuery();
query.Add(new FullTextQuery(searchTerm), QueryOccurance.Must);
return searchContext.Search(query, Sort.RELEVANCE);
}
...
SearchHits hits = GetSearchResults(searchContext, searchTerm);
hits 是我的索引中搜索命中的集合。当我遍历 hits 时,我可以看到 Sitecore 中有许多相同项目的重复项,每个版本的项目 1 个。
然后我执行以下操作以获得SearchResultCollection:
SearchResultCollection results = hits.FetchResults(0, hits.Length);
这会将所有重复项组合成一个 SearchResult 对象。此对象表示特定项目的 1 个版本,并有一个名为 SubResults 的属性,它是代表所有其他项目版本的 SearchResults 的集合。
这是我的问题:
SearchResult 所代表的项目版本不是项目的当前发布版本!它似乎是一个随机选择的版本(无论哪种搜索方法在索引中首先出现)。不过,最新版本已包含在 SubResults 集合中。
例如:
SearchResult
|
|- Version 8 // main result
...
|- SubResults
|
|- Version 9 // latest version
|- Version 3
|- Version 5
... // all versions in random order
如何防止在主数据库上发生这种情况?通过阻止 Lucene 索引项目的旧版本,或者通过对结果集进行一些操作以从 SubResults 获取最新版本?
顺便说一句,为什么 Lucene 还要费心索引旧版本的项目呢?由于旧版本不可见,这对于在您的网站上搜索内容肯定没有意义吗?
【问题讨论】:
标签: c# search lucene indexing sitecore