我们正在尝试按 Title 字段对 Lucene 结果进行排序。
根据我对 Lucene 的了解,这要求该字段为 NOT_ANALYZED。
从我在论坛上看到的内容来看,这也需要我们使用 LowerCaseKeywordAnalyzer。(这里)
我无法弄清楚如何将它们组合在一起,这就是我现在所拥有的,并且排序不起作用:
在 Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration 中:
<fields hint="raw:AddCustomField">
<!--...-->
<field luceneName="titleForSorting" storageType="yes" indexType="untokenized">Title</field>
</fields>
我们的搜索结果类:
public class ContentSearchResultItem : SearchResultItem
{
public virtual string Title { get; set; }
[IndexField("titleForSorting")]
public virtual string TitleForSorting { get; set; }
}
我们的搜索实现:
using (var context = ContentSearchManager.GetIndex(Context.Indexname).CreateSearchContext())
{
var query = context.GetQueryable<ContentSearchResultItem>()
.Where(x => x.Title == "New York")
.OrderBy(x => x.TitleForSorting);
var searchResult = query.GetResults();
var hitsQuery = searchResult.Hits;
// Or sort here ??
// hitsQuery = hitsQuery.OrderBy(x => x.Document.TitleForSorting);
var results = hitsResults.Select(x => x.Document).ToArray();
}
如前所述,我还读到我们应该使用 LowerCaseKeywordAnalyzer。但无法弄清楚在哪里配置它。似乎没有提供任何添加选项的地方。
欢迎任何帮助,谢谢!