2017-06-06 9 views
3

私はterms-lookup-filter aggregationを使ってelasticsearchクエリを次のようにしています。どちらのクエリでも同じ結果が得られます。両方のクエリが同じフィルタタイプを持つのは、その違いがterms-lookup-filterの順序(場所)だけです。elasticsearchクエリのterms-lookup-filter aggregation orderは実行時間(効率)に影響しますか?

1.用語検索フィルタは、フィルタ集約の2番目/最後の位置にあります。

{ 
    "size": 0, 
    "aggs": { 
     "filterAggs": { 
     "filter": { 
      "and": { 
       "filters": [ 
        { 
        "range": { 
         "eligibleDates": { 
          "include_lower": true, 
          "include_upper": true, 
          "from": <fromDate>, 
          "to": <toDate> 
         } 
        } 
        }, 
        { 
        "terms": { 
         "rollNo": { 
          "path": "student.rollNo", 
          "index": "<index_name>", 
          "id": "<record_id>", 
          "type": "<es Type>" 
         } 
        } 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

2.Here用語ルックアップフィルタはフィルタ凝集の第一の位置にあります。

{ 
    "size": 0, 
    "aggs": { 
     "filterAggs": { 
     "filter": { 
      "and": { 
       "filters": [ 
        { 
        "terms": { 
         "rollNo": { 
          "path": "student.rollNo", 
          "index": "<index_name>", 
          "id": "<record_id>", 
          "type": "<es Type>" 
         } 
        } 
        }, 
        { 
        "range": { 
         "eligibleDates": { 
          "include_lower": true, 
          "include_upper": true, 
          "from": <fromDate>, 
          "to": <toDate> 
         } 
        } 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

私の実験/テストでは、第1のクエリは第2のクエリよりも効率的に(7~10倍速く)実行されます。 私の質問は、elasticsearchクエリのterms-lookup-filter集計順が実行時間(効率)に影響しますか?フィルタの配置順は実行時間にどのように影響しますか?

答えて

0

elasticsearchは、特定のアルゴリズムで最適化された実行順序を見つけるだろうので、それは問題ではありません。
いくつかの記事でフィルタ/クエリをいくつかのcriter(たとえば、どちらが最初に優先すべきかなど)によって順序付ける必要があると言われていますが、非常に詳細で正確な記事を読むと、は正しくありませんです。 これはelasticsearchで、フィルタ/クエリの実行順序についての素晴らしい記事です:

Optimizing Elasticsearch Searches

:あなたはあなたのクエリを最適化したい場合は、私はこれを読むことをお勧めします

In which order are my Elasticsearch queries/filters executed?

たとえば、range filterがあり、Cache Granularity and Acceleration Filters部分を使用して最適化することができます。

関連する問題