Skip to content

Instantly share code, notes, and snippets.

@yangl
Last active March 18, 2019 08:15
Show Gist options
  • Save yangl/2b1c84ae2294d41afdb61e2dc1b966ee to your computer and use it in GitHub Desktop.
Save yangl/2b1c84ae2294d41afdb61e2dc1b966ee to your computer and use it in GitHub Desktop.

distinct

{
  "size": 0,
  "aggs": {
    "uniq_country": {
      "terms": {
        "field": "alarmData.alarmType"
      }
    }
  }
}

group by where

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "dxpGpsData.gpsTime": {
                            "lte": $gpsTime
                        }
                    }
                },
                {
                    "range": {
                        "dxpGpsData.latitude": {
                            "gte": 1
                        }
                    }
                },
                {
                    "range": {
                        "dxpGpsData.latitude": {
                            "gte": 1
                        }
                    }
                }
            ],
            "filter": [
                {
                    "terms": {
                        "imei.keyword": $imei
                    }
                }
            ]
        }
    },
    "aggregations": {
        "by_imei": {
            "terms": {
                "size": 2147483647,
                "field": "imei.keyword"
            },
            "aggregations": {
                "online_time": {
                    "max": {
                        "field": "dxpGpsData.gpsTime"
                    }
                },
                "detail": {
                    "top_hits": {
                        "size": 1,
                        "from": 0,
                        "_source": {
                            "excludes": [],
                            "includes": [
                                "dxpGpsData.latitude",
                                "dxpGpsData.longitude",
                                "dxpGpsData.gpsTime"
                            ]
                        },
                        "sort": [
                            {
                                "dxpGpsData.gpsTime": {
                                    "order": "desc"
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
}

select where

{
    "_source": {
        "includes": [
            "imei",
            "dxpGpsData.gpsTime",
            "dxpGpsData.speed",
            "dxpGpsData.longitude",
            "dxpGpsData.latitude",
            "dxpFullProtoData.alarmType"
        ],
        "excludes": []
    },
    "from": 0,
    "size": 20,
    "min_score": 1,
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": [
                        {
                            "range": {
                                "dxpFullProtoData.alarmType": {
                                    "gt": 0
                                }
                            }
                        },
                        {
                            "range": {
                                "dxpGpsData.latitude": {
                                    "gte": 1
                                }
                            }
                        },
                        {
                            "range": {
                                "dxpGpsData.latitude": {
                                    "gte": 1
                                }
                            }
                        },
                        {
                            "range": {
                                "dxpGpsData.speed": {
                                    "lte": 200
                                }
                            }
                        },
                        {
                            "range": {
                                "dxpGpsData.gpsTime": {
                                    "gte": $startTime,
                                    "lte": $endTime
                                }
                            }
                        }

                    ],
                    "filter": [
                        {
                            "terms": {
                                "imei": $imei
                            }
                        }
                    ]
                }
            }
        }
    },
    "sort": [
        {
            "dxpGpsData.gpsTime": "desc"
        }
    ]
}

too_many_clauses: maxClauseCount is set to 1024

es的in查询,in中id大于1024个,导致es报错,es默认支持元素数量为1024个。 编辑elasticsearch.yml,添加如下配置: indices.query.bool.max_clause_count: 10240

或者把must中的terms移至filter中

必须过滤条件建议优先使用filter,只有该条件要参与score计算时才用must!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment