2016-07-21 3 views
0

クエリコンテキストフィルタコンテキストとの違いは、クエリDSLのエラスティックサーチです。クエリコンテキストとフィルタコンテキストの相違点

私の理解はクエリコンテキストです。ドキュメントがクエリパラメータとどのくらい一致するか。

例:私はタイトルの文書を探していた場合、私は二つの文書

が含まれている場合

{ "match": { "title": "Search"  }} 

二つがある

 i)title:"Search"  
     ii)title:"Search 123" 

が続いて最初の文書が完璧にマッチし、文書で、次に「検索」半一致そして、最初の文書が最初の場所に与えられ、2番目の文書が2番目の場所が与えられる。私の理解は正しいのですか?

フィルターコンテキスト
例:

{ "term": { "status": "published" }} 

私はステータスを持つ文書を探していた場合、私は二つの文書

 i)status:"published"  
     ii)status:"published 123" 

が含まれている場合は、最初の文書があるし、「公表」完璧なので返され、2番目の試合は完璧な試合ではないので返されません。私の理解は正しいのですか?

+1

このスレッドは役立ちます:http://stackoverflow.com/questions/14595988/queries-vs-filters – Val

+0

私の理解は正しいですか? –

+1

フィルターは、はい/いいえの回答に基づいて文書を選択するために使用できます(スコアリングはありません)。一方、照会は主に全文検索(および採点)に使用されます。主なアイデアは、可能な限りドキュメントをフィルタリングし**できるように**クエリ**を最低限のドキュメントで実行できるようにすることです。あなたの理解は正しいです。 – Val

答えて

0

タームとマッチクエリの違いについての理解は最も基本的なレベルでは正しいですが、Jettroがフィルタクエリにコメントしたように、両方のドキュメントが選択されます。用語クエリを実行するときは、実際に使用しているアナライザの種類と、それがどのようにルーゼンが使用する逆インデックスに格納されている用語に影響するかによって異なります。 "Elasticsearch:Th Definitive Guide"の例を引用すると、["Foo"、 "Bar"]を正確な値のnot_analyzedフィールドに、Foo Barを空白アナライザの分析フィールドにインデックスすると、逆指数の2つの言葉FooとBarを持つ。

ここで、用語クエリは、逆インデックスのすべての用語をクエリ用語で検索し、一致するものがあっても結果として返されます。 最初のケースでは逆インデックスに「公開」しかありませんが、2番目のケースでも「公開」と「123」の両方の用語があるため、両方の文書が一致として返されます。

用語クエリでは、逆インデックスが正確な用語のみで検索されることも覚えておくことが重要です。 "Published"や "publisheD"のようなバリエーションは "published"とマッチしません。