2017-02-25 26 views
0

私はelasticsearchでインデックスを作成しているドキュメントがあります。しかし、いくつかの文書は大文字で書かれており、Tukish文字は変更されています。例えば、 "kurst"は "KURSAT"と書かれています。トルコ文字の弾性検索検索

"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" 
    } 
    } 
} 

応答: 'preserve_original' フラグを確認します今

"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" 
     } 
     } 
    ] 
    } 

その場合、ユーザの種類: 'kürşat'、その正確とドキュメント一致が「kursat」を持つ文書よりも高くランク付けされます(両方のクエリ応答のスコアの違いに注意してください)。

スコアを等しくしたい場合は、フラグをfalseにすることができます。

私はあなたの問題を右に持っています!