、 "Jo"、 "Jos"、 "Jose"、 "Josep"のように、私は質問を逆にしたい。ElasticSearchリバースワイルドカード検索
"Jo"、 "Jos"、 "Jose"、 "Josep"という文字列を検索条件として「Joseph」という文字列を使用して検索するにはどうすればよいですか?
、 "Jo"、 "Jos"、 "Jose"、 "Josep"のように、私は質問を逆にしたい。ElasticSearchリバースワイルドカード検索
"Jo"、 "Jos"、 "Jose"、 "Josep"という文字列を検索条件として「Joseph」という文字列を使用して検索するにはどうすればよいですか?
これは可能ですが、インデックス設定でedgeNGram
検索アナライザを作成する必要があります。
まず、このような設定を行います。 name
フィールドはstandard
アナライザーでインデックスされますが、代わりにカスタムprefix_search
アナライザーで検索されます。
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"prefix_search": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"prefix"
]
}
},
"filter": {
"prefix": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 10
}
}
}
},
"mappings": {
"doc": {
"properties": {
"name": {
"type": "string",
"analyzer": "standard",
"search_analyzer": "prefix_search"
}
}
}
}
}
次に、あなたはこのように文書を作成した場合:
POST /test/doc/_search
{
"query": {
"match": {
"name": "Joseph"
}
}
}
ありがとう、ヴァル! – montewhizdoh
よかった、うれしかったよ! – Val
申し訳ありませんが私は言及すべきでした....私は "aaajoseph"とのクエリを行う場合、それは動作しますか? – montewhizdoh
はい、それは可能です:
をあなたはこのようなクエリでそれを見つけることができます。あなたのインデックスに特定のアナライザ設定がありますか?はいの場合は、それらを共有できますか? – Val
私たちは何も特別なものを追加しませんでした。昨日NESTを使用してドキュメントを索引付けしました。 – montewhizdoh