【发布时间】:2021-04-12 10:41:32
【问题描述】:
我正在为 .Net 使用 Nest.ElasticSearch 库
我有一个用于索引的模型,它有一个我想按字母顺序(A-Z)排序的字段
[Text(Fielddata = true, Analyzer = "keyword")]
public string FieldToSort { get; set; }
然后我有一个我调用的端点,它将使用 Nest.ElasticClient
if (sortProperty != null)
{
SortOrder sortOrder = sortValue != null && sortValue.ToLower() == "asc" ? SortOrder.Ascending : SortOrder.Descending;
switch (sortProperty.ToLower())
{
case "fieldToSort":
sortDescriptor.Field(s => s.FieldToSort , sortOrder);
break;
}
}
var response = _client.Search<FieldModel>
(
s => s.Index("indexName")
.Query(q => q
.Bool(b => b
.Filter(filterDescriptor)
.Must(sh => string.IsNullOrWhiteSpace(query) ? sh.MatchAll() : sh
.MultiMatch(mm => mm
.Fields(f => f
.Field(c => c.something, 1)
.Field(c => c.somehingelse, 3)
.Query(query)
.Operator(Operator.And)
)
)
)
)
.TrackTotalHits(true)
.MinScore(Config.ElasticSearch.MinScore)
.Sort(so => sortDescriptor)
.Skip(offset)
.Take(pageSize)
);
问题是,当我得到列表时,它似乎订购了 A-Za-z,如果我希望它不区分大小写怎么办,所以它不考虑它是大写还是小写?
【问题讨论】:
-
我看到 2 个解决方案:1) 使用转换为小写的脚本进行排序 2) 使用不区分大小写的分析器 (technetexperts.com/web/…) 将数据复制到另一个字段(使用 copy_to),脚本应该更低,看起来像:sorts.Add(new ScriptSort { Type = "string", Order = SortOrder.Ascending, Script = new InlineScript(doc['fieldtosort'].value.toLowerCase()) });
标签: .net elasticsearch nest