2013-07-19 6 views
5

の注文私はthis questionを読んだし、私の同僚は、私は疑う製:フィルタクエリでクエリ - 実行

、フィルタが適用されたとき?クエリの実行前または実行後?結果はいつキャッシュされますか?

フィルタを事前に適用している場合は、クエリ部分をフィルタに複製するのは良いことではありませんか? フィルタを後で適用すると、キャッシュされているものを理解できない場合があります。

答えて

9

幸いにも、ESは、フィルタの2種類が用意されています。最初のケースで

{ 
    "query" : { 
    "field" : { "title" : "Catch-22" } 
    }, 
    "filter" : { 
    "term" : { "year" : 1961 } 
    } 
} 


{ 
    "query": { 
    "filtered" : { 
     "query" : { 
     "field" : { "title" : "Catch-22" } 
     }, 
     "filter" : { 
     "term" : { "year" : 1961 } 
     } 
    } 
    } 
} 

、フィルタは、クエリで見つかったすべての文書に適用されます。 2番目のケースでは、クエリが実行される前にドキュメントがフィルタ処理されます。これにより、パフォーマンスが向上します。より引用

:キャッシュについてhttp://www.packtpub.com/elasticsearch-server-for-fast-scalable-flexible-search-solution/book

は、私はフィルタのキャッシュメカニズムについてはよく分かりません。 私の推測は次のようになります。 フィルタはクエリによって返された結果のセットとの関係であるため、キャッシュはこの戻りセットに固有のものです。 2番目のケースでは、フィルタが最初に適用され、チェックしたインデックスに対してキャッシュが保存されるため、クエリの内容に依存しないため、このキャッシュは再利用可能になります。 (キャッシュが生成される前の)時間。

1

私はあなたがクエリは常に、あなたが検索したい参照の完全なドキュメントがあるということです

最初のものをexecution-検索説明しましょう。

フィルタクエリが検索クエリに含まれている場合、そのドキュメントを小さくするか、言い換えればフィルタクエリは同じクエリのキャッシュ結果になります。 クエリテキストで検索するツリーが小さくなりました。

フィルタでクエリを複製すると、キャッシュメカニズムのオーバーヘッドが増えます。フィルタクエリに含める内容と無視する対象については、多くのガイドラインがあります。それはすべての関連性の遊びです。あなたが動作するために