2016-05-10 7 views
1
{ 
    "title" : "That Uselessly Amazing Title", 
    "author" : "Someone you have never heard of", 
    "url" : "http://www.theuselessweb.com", 
    "summary" : "a collection of useless websites", 
    "tag" : ["useless","maybe useful"] 
} 

私は上記のようなスキーマを持っています。ユーザーはアプリケーションに「役に立たない」何かを表示するよう求めます。ElasticSearchは複数のフィールドをファジークエリとして見ます

「役に立たない」という単語のタイトル、要約、およびタグをファジー検索として検索するクエリを作成するにはどうすればよいですか?

答えて

1

それが許容量は、基本的なmatchmulti_matchクエリでのみ動作しmulti_matchクエリ

を使用しているため、ドキュメントFuzzy match Query

GET /my_index/my_type/_search 
{ 
    "query": { 
    "multi_match": { 
     "fields": [ "summary", "title", "tag" ], 
     "query":  "useless", 
     "fuzziness": "AUTO" 
    } 
    } 
} 

から、このクエリは動作します。フレーズ一致、一般的な用語、またはcross_fields と一致すると は機能しません。

そうでない場合は[OK]をboolクエリ

+0

内部combineいくつかfuzzyクエリする必要があります、それが動作するようになりました。私が "役に立たない"の代わりに "使う"を試みると、結果は得られません。それはなぜですか?それも許す方法はありますか?部分的な文字列ですか? –

+0

アナライザー、トークンフィルターなどに依存します。エンティティーを索引付けして検索する方法を使用します。標準のアナライザ(英語)を使用しているとしたら、タイトルは「That」、「Uselessly」、「Amazing」、「Title」の各トークンにトークン化され、各トークンは独立して分析されます。 "役に立たない"というトークンについては、標準的な英語のアナライザが "役に立たない"(小文字)を保存していると思います。だから、あなたが "use"を検索すると結果が見つかりません。他のアナライザーで試してみてください。自分のトークンフィルターを追加したいかもしれません。私は個人的にElasticSearch.GLによって与えられたものを使用することを好む! –

+0

標準のトークナイザーと混在したEdge NGramトークナイザーが大好きですね。覚えておいてください。 –

関連する問題