弹性搜索中的土耳其字符问题



当我在弹性搜索中使用土耳其语字符进行搜索时,它不匹配。例如,当我键入";yazilim";,结果来了,但当我键入";Yazılım";,没有结果。正确的是";Yazılım";。

我的索引代码。

var createIndexDescriptor = new CreateIndexDescriptor(INDEX_NAME).Mappings(ms => ms.Map<T>(m => m.AutoMap()
.Properties(pprops => pprops
.Text(ps => ps
.Name("Title")
.Fielddata(true)
.Fields(f => f
.Keyword(k => k
.Name("keyword")))))
)).Settings(st => st
.Analysis(an => an
.Analyzers(anz => anz
.Custom("tab_delim_analyzer", td => td
.Filters("lowercase", "asciifolding")
.Tokenizer("standard")
)
)
)
);

我的搜索查询代码。

var searchResponse = eClient.Search<GlobalCompany>(s => s.Index(INDEX_NAME).From(0).Size(10)
.Query(q => q
.MultiMatch(m => m
.Fields(f => f
.Field(u => u.Title)
.Field(u => u.RegisterNumber))
.Type(TextQueryType.PhrasePrefix)
.Query(value))));

您使用的是asciifolding过滤器,它可以确保使用ASCII字符(请参阅文档(。

您需要将字段Title配置为text字段,而不是keyword字段,并将该字段的analyzer设置为tab_delim_analyzer

我不知道如何在dotNet世界中翻译这个,但这是我在纯Kibana开发控制台脚本(curl(中的意思:

DELETE deneme
PUT deneme
{
"settings": {
"analysis": {
"analyzer": {
"tab_delim_analyzer": {
"type": "custom", 
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": {
"properties": {
"Title": {
"type": "text",
"analyzer": "tab_delim_analyzer"
}
}
}
}

最新更新