我认识到这是网络数据库上的一个有争议的问题,所以这个问题适用于主数据库......
我在 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>
我像这样查询索引(我正在使用SortableIndexSearchContext
来自此答案的 techphoria414:如何使用新的 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
的 s 的集合。SearchResult
这是我的问题:
所代表的项目版本SearchResult
不是该项目的当前发布版本!它似乎是一个随机选择的版本(无论哪种搜索方法在索引中首先出现)。但是,最新版本包含在SubResults
集合中。
例如:
SearchResult
|
|- Version 8 // main result
...
|- SubResults
|
|- Version 9 // latest version
|- Version 3
|- Version 5
... // all versions in random order
如何防止这种情况在主数据库上发生?通过阻止 Lucene 索引项目的旧版本,或者通过对结果集进行一些操作以从SubResults
?
顺便说一句,为什么 Lucene 还要费心索引旧版本的项目呢?当然这对于在您的网站上搜索内容毫无意义,因为旧版本不可见?