如何解决elasticsearch中的土耳其语字符问题
当我在 elasticsearch 中搜索土耳其语字符时,它不匹配。例如,当我输入“yazilim”时,结果来了,但当我输入“Yazılım”时,却没有结果。正确的是“Yazilı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 字符 (see docs)。
您需要将字段 const [facts,setfacts] = useState([])
let d = new Date()
let facturl = `https://en.wikipedia.org/api/rest_v1/feed/onthisday/births/${d.getMonth()+1}/${d.getDate()}`
fetch(facturl)
.then(res => res.json())
.then(data => {
const facts = data.births.slice(0,5).map((x) => {
return x.text + x.year;
});
setFacts(facts);
});
return (
<div className="facts">
{facts.map(fact=> (<div className="fact-item">{fact}</div>))}
</div>
)
配置为 Title
字段而不是 text
字段,并将此字段的 keyword
设置为 analyzer
。
我不知道如何在 dotNet 世界中翻译它,但这是我在纯 Kibana 开发控制台脚本 (curl) 中的意思:
tab_delim_analyzer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。