我正在使用 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"))))
);
希望有帮助。