2017-02-25 52 views
0

我有一些文件,我用elasticsearch索引。但有些文件是用大寫字母和Tukish字符改變的。例如「kürşat」被寫爲「KURSAT」。Elasticsearch搜索土耳其字符

我想通過搜索「kürşat」找到這個文件。我怎樣才能做到這一點?

感謝

+0

如果你想以相反的方式('kürşat'->'KURSAT'),這很容易,但這樣做,即試圖推斷'U'應該是'ü'並不容易,因爲'U'也可以是一個正常的'u'(這在土耳其語中也是有效的)。 'S'也一樣。我想你需要以某種方式在字典中查找單詞。 – Val

+0

這是確切的問題。將所有「U」字符轉換爲「ü」很容易,但很難確定哪個「u」是真實的「u」或「ü」。當我搜索「kürşat」時,我想檢索「kursat」和「kürşat」 –

回答

2

看看在asciifolding token filter

這裏是一個小例子讓你嘗試在意識:

指數:

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'的文檔(注意兩個查詢響應的分數的差異)。

如果您希望得分相同,您可以將該標記置於假。

希望我解決了你的問題!