2017-03-10 20 views
1

、 "Jo"、 "Jos"、 "Jose"、 "Josep"のように、私は質問を逆にしたい。ElasticSearchリバースワイルドカード検索

"Jo"、 "Jos"、 "Jose"、 "Josep"という文字列を検索条件として「Joseph」という文字列を使用して検索するにはどうすればよいですか?

+0

はい、それは可能です:

PUT test/doc/1 { "name": "Jos" } 

をあなたはこのようなクエリでそれを見つけることができます。あなたのインデックスに特定のアナライザ設定がありますか?はいの場合は、それらを共有できますか? – Val

+0

私たちは何も特別なものを追加しませんでした。昨日NESTを使用してドキュメントを索引付けしました。 – montewhizdoh

答えて

1

これは可能ですが、インデックス設定で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" 
    } 
    } 
} 
+0

ありがとう、ヴァル! – montewhizdoh

+0

よかった、うれしかったよ! – Val

+0

申し訳ありませんが私は言及すべきでした....私は "aaajoseph"とのクエリを行う場合、それは動作しますか? – montewhizdoh

関連する問題