我使用术语-查找-过滤器聚合跟踪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查询中,术语查找-过滤器聚合顺序是否会影响执行时间(效率)?过滤器的位置顺序将如何影响执行时间?
发布于 2017-06-06 05:59:23
,No,,没关系,因为elasticsearch会通过特定的算法找到优化的执行顺序。
我在一些文章中看到过,他们说您应该通过一些标准来排序过滤器/查询(例如,哪个应该先过滤),但是在阅读了一篇非常详细和准确的文章之后,发现它们是,不正确的。这是关于elasticsearch中过滤器/查询执行顺序的优秀文章:
如果您想优化您的查询,我建议您阅读以下内容:
例如,您有range filter,可以使用Cache Granularity and Acceleration Filters部件对其进行优化。
https://stackoverflow.com/questions/44381318
复制相似问题