0
我有一些文件,我用elasticsearch索引。但有些文件是用大写字母和Tukish字符改变的。例如“kürşat”被写为“KURSAT”。Elasticsearch搜索土耳其字符
我想通过搜索“kürşat”找到这个文件。我怎样才能做到这一点?
感谢
我有一些文件,我用elasticsearch索引。但有些文件是用大写字母和Tukish字符改变的。例如“kürşat”被写为“KURSAT”。Elasticsearch搜索土耳其字符
我想通过搜索“kürşat”找到这个文件。我怎样才能做到这一点?
感谢
这里是一个小例子让你尝试在意识:
指数:
DELETE test
PUT test
{
"settings": {
"analysis": {
"filter": {
"my_ascii_folding": {
"type": "asciifolding",
"preserve_original": true
}
},
"analyzer": {
"turkish_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_ascii_folding"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"name": {
"type": "string",
"analyzer": "turkish_analyzer"
}
}
}
}
}
POST test/test/1
{
"name": "kürşat"
}
POST test/test/2
{
"name": "KURSAT"
}
查询:
GET test/_search
{
"query": {
"match": {
"name": "kursat"
}
}
}
响应:
"hits": {
"total": 2,
"max_score": 0.30685282,
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "2",
"_score": 0.30685282,
"_source": {
"name": "KURSAT"
}
},
{
"_index": "test",
"_type": "test",
"_id": "1",
"_score": 0.30685282,
"_source": {
"name": "kürşat"
}
}
]
}
查询:
GET test/_search
{
"query": {
"match": {
"name": "kürşat"
}
}
}
响应:
"hits": {
"total": 2,
"max_score": 0.4339554,
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "1",
"_score": 0.4339554,
"_source": {
"name": "kürşat"
}
},
{
"_index": "test",
"_type": "test",
"_id": "2",
"_score": 0.09001608,
"_source": {
"name": "KURSAT"
}
}
]
}
现在 'preserve_original' 标志将确保如果用户键入: 'kürşat',与准确的文档匹配的排名会高于拥有'kursat'的文档(注意两个查询响应的分数的差异)。
如果您希望得分相同,您可以将该标记置于假。
希望我解决了你的问题!
如果你想以相反的方式('kürşat'->'KURSAT'),这很容易,但这样做,即试图推断'U'应该是'ü'并不容易,因为'U'也可以是一个正常的'u'(这在土耳其语中也是有效的)。 'S'也一样。我想你需要以某种方式在字典中查找单词。 – Val
这是确切的问题。将所有“U”字符转换为“ü”很容易,但很难确定哪个“u”是真实的“u”或“ü”。当我搜索“kürşat”时,我想检索“kursat”和“kürşat” –