如何使 Nest Elasticsearch 不区分大小写

问题描述

我正在为 .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,如果我希望它不区分大小写,所以它不考虑大写或小写怎么办?

解决方法

您应该在索引时执行此操作以获得最佳性能。您可以在索引设置中定义小写规范化器:

.Normalizers(norm => norm.Custom("lowercase",cn => cn.Filters("lowercase"));

然后在您的映射中定义它。如果您使用基于属性的映射,它看起来像这样:

[Keyword(Index = true,Normalizer = "lowercase")]

根据您的 ES 和 NEST 版本,语法可能略有不同,但这是通用方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...