如何使用过滤查询优化弹性搜索aggs

时间:2014-12-25 07:41:27

标签: elasticsearch filter query-optimization aggregate

当我尝试运行此查询时,elasticsearch没有回答,并且发生了大量的缓存驱逐(与字段缓存相关)。

我不想在此查询中缓存任何字段,因为这是一个我每天只运行一次的分析查询。有没有办法在不使用字段缓存的情况下获取此aggs。我尝试过doc值,但需要45秒或更长时间。期待您的建议。

HEAP内存:30GB
ES版本1.3.1
指数大小:350 GB

{  
   "query": {
      "filtered": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "term": {
                        "type": "161"
                     }
                  },
                  {
                     "term": {
                        "cat": "Math"
                     }
                  }
               ]
            }
         }
      }
   },
   "aggs": {
      "tepo": {
         "terms": {
            "field": "tepo"

         }
      }
   }
}            

1 个答案:

答案 0 :(得分:0)

您需要使用doc值或字段数据缓存,否则不会发生聚合。由于此查询不是很频繁,因此建议为该查询禁用过滤器缓存。

   "filter" : {
        "term" : {
            "cath" : "Math",
            "_cache" : false
        }
    }

这样就不会生成过滤器位集缓存,您可以在其上保存一些内存。 链接 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-filter.html#_caching_18

另一种方法是限制主内存中的字段数据缓存量,这样就可以确保字段数据缓存不会超过主内存 链接 - http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html