elasticsearch 弹性搜索嵌入式脚本优化
有没有办法简化和优化以下查询:
elasticsearch 弹性搜索嵌入式脚本优化,
elasticsearch,
elasticsearch,有没有办法简化和优化以下查询: { "query": { "filtered": { "filter": { "and": [ { "range": { "ts": { "gte": "2014-12-18", "lte": "2014-12-18" } }
{
"query": {
"filtered": {
"filter": {
"and": [
{
"range": {
"ts": {
"gte": "2014-12-18",
"lte": "2014-12-18"
}
}
}
]
},
"query": {
"match": {
"track_events.event": "render"
}
}
}
},
"aggs": {
"per_type": {
"terms": {
"field": "type",
"order": {
"_count": "desc"
},
"size": 0
},
"aggs": {
"per_hour": {
"terms": {
"script": "(doc[\"track_events.ts\"].value - doc[\"ts\"].value)/(1000 * 3600)",
"order": {
"_count": "desc"
},
"size": 0
}
}
}
}
}
}
elasticsearch中的索引包含带有字段track\u events.ts
和ts
的文档。目的是统计track\u events.ts
和ts
之间每小时发生的事件数。
答复示例:
"buckets": [{
"key": "0",
"doc_count": 67736997
},
{
"key": "1",
"doc_count": 7193214
},
{
"key": "2",
"doc_count": 3406966
},
{
"key": "3",
"doc_count": 1988135
}]
}
这意味着
67736997
计算时差小于1小时的时间,7193214
计算时差小于2小时的时间,等等。最大的性能增益是替换脚本
i、 e.而不是做:
(doc[\"track_events.ts\"].value - doc[\"ts\"].value)/(1000 * 3600)
将数据加载到Elasticsearch并将其放入另一个字段时,预先计算此值。然后在此字段上执行术语聚合