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」 –