elasticsearch查询中的terms-lookup-filter聚合顺序是否会影响执行时间(效率)?

时间:2017-06-06 04:15:43

标签: elasticsearch

我使用terms-lookup-filter聚合跟随elasticsearch查询。两个查询都会给出相同的结果。两个查询都具有相同的过滤器类型,区别在于术语 - 查找 - 过滤器的顺序(位置)。

1.这些条件查找过滤器位于过滤器聚合的第二个/最后一个位置。

  {
   "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.这些术语 - 查找过滤器位于过滤器聚合的第一位置。

{
   "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>
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}

在我的实验/测试中,第一个查询比第二个查询更有效地执行(比第二个查询快7到10倍)。  现在我的问题是,elasticsearch查询中的terms-lookup-filter聚合顺序会影响执行时间(效率)吗?过滤器下单如何影响执行时间?

1 个答案:

答案 0 :(得分:0)

没关系,因为 elasticsearch会通过特定算法找到优化的执行顺序
我在一些文章中看到他们说你应该通过一些标准来订购过滤器/查询(例如,哪一个是更多的文件应该先去)但是在阅读了非常详细和确切的文章后发现它们不正确。 这是关于elasticsearch中的过滤器/查询执行顺序的好文章:

<强> In which order are my Elasticsearch queries/filters executed?

如果您想优化查询,我建议您阅读:

<强> Optimizing Elasticsearch Searches

例如,您有range filter,可以使用Cache Granularity and Acceleration Filters部分对其进行优化。