我使用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聚合顺序会影响执行时间(效率)吗?过滤器下单如何影响执行时间?
答案 0 :(得分:0)
否没关系,因为 elasticsearch会通过特定算法找到优化的执行顺序。
我在一些文章中看到他们说你应该通过一些标准来订购过滤器/查询(例如,哪一个是更多的文件应该先去)但是在阅读了非常详细和确切的文章后发现它们不正确。
这是关于elasticsearch中的过滤器/查询执行顺序的好文章:
<强> In which order are my Elasticsearch queries/filters executed? 强>
如果您想优化查询,我建议您阅读:
<强> Optimizing Elasticsearch Searches 强>
例如,您有range filter
,可以使用Cache Granularity and Acceleration Filters
部分对其进行优化。