我们正在尝试按标题字段对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。但是无法弄清在哪里进行配置。
<luceneQueryParser>
似乎没有提供任何添加选项的地方。欢迎任何帮助,谢谢!
ContentSearchManager.GetIndex(Context.Indexname).CreateSearchContext()
上出现了NullReferenceException异常。TitleForSorting实际上不是Sitecore中的字段,而是我在raw:AddCustomField
部分手动添加的字段。 - BertvanfieldMap
条目和自定义字段条目?如果没有,请尝试同时拥有它们,因为fieldMap
在索引时应该会给出分析器提示。 - Stephen Pope