Elasticsearch 7.x 使用规范化器进行不区分大小写的排序



我正在使用 elasticsearch 7.5 和 NEST 客户端。

我想对查询进行排序,如您所知,默认情况下 A..咱。。z.我希望它不区分大小写。

我正在尝试使用此处解释的规范化器

PUT /testindex
{
"settings": {
"analysis": {
"normalizer": {
"case_insensitive": {
"filter": "lowercase"
}
}
}
}
}

然后我可以在映射中使用它:

PUT /testindex/_mapping/testmapping
{
"properties": {
"Id": {
"type": "keyword"
},
"Name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"normalizer": "case_insensitive"
}
}
}
}
}

当我尝试在 C# NEST 客户端上执行此操作时会出现问题:

client.Indices.Create("testindex", e => e
.Settings(s => s
.Analysis(a => a
.Normalizers(n => n.Custom("case_insensitive",c => c.Filters("lowercase")))))
.Map(m => m
.Properties(p => p
.Text(st => st.Name("Name")
**.NORMALIZER**)))
);

无法将规范化程序的"名称"属性字段添加。

有什么想法吗?另一种高效的方法?

谢谢一百万。

正如文档所说,此属性是关键字类型属性的一部分。

关键字字段的规范化器属性类似于分析器 除了它保证分析链产生单个 令 牌。

只需将您的道具更改为关键字字段即可让您放置规范化器

await client.Indices.CreateAsync("testindex", e => e
.Settings(s => s
.Analysis(a => a
.Normalizers(n => n.Custom("case_insensitive", c => c.Filters("lowercase")))))
.Map(m => m
.Properties(p => p
.Keyword(st => st.Normalizer("case_insensitive").Name("Name"))))
);

希望有帮助。

最新更新