edgeNGram token filterを使用するカスタムアナライザを作成することで、このニーズを処理する最善の方法があります。ワイルドカードを忘れて、クエリ文字列に*
を使用すると、それらはすべてedgeNGramのアプローチよりもパフォーマンスが低いです。
このようにインデックスを作成してから、データをインデックスに再作成する必要があります。 j
、ju
、jus
、just
、justi
、justin
、JUSTINの基本的にすべてのプレフィックス:first_name: JUSTIN
のインデックスを作成する際に
curl -XPUT http://localhost:9200/sample -d '{
"settings": {
"analysis": {
"filter": {
"prefixes": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 15
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "prefixes"]
}
}
}
},
"mappings": {
"your_type": {
"properties": {
"first_name": {
"type": "string",
"analyzer": "my_analyzer",
"search_analyzer": "standard"
}
}
}
}
}'
その後、次のインデックス付きのトークンを取得します。
これで、2番目のクエリで検索し、実際に期待する結果を見つけることができます。
search_response = es.search(index = 'sample', body = {'query':{'match':{'first_name':'JUST'}}})
出典
2016-04-20 03:33:54
Val
の可能性のある重複した[Elasticsearch:サブストリングの一致を検索](http://stackoverflow.com/questions/23243867/elasticsearch-find-substring-match) – BlackPOP
いいえ、 'query'はあなたに記録する場合を取得することはできません一致'JUST'を検索します。あなたは 'ワイルドカードクエリ'でJUST *を試すことができます – Richa