elasticsearch - 如何使用过滤器查询优化 Elasticsearch aggs

标签 elasticsearch filter query-optimization aggregate

当我尝试运行此查询时,elasticsearch无法回答,并且发生大量缓存逐出(与字段缓存有关)。

我不想在此查询中缓存任何字段,因为这是一个分析查询,我每天只运行一次。有什么办法可以在不使用字段缓存的情况下获取此摘要。我尝试了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"

         }
      }
   }
}            

最佳答案

您将需要使用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

关于elasticsearch - 如何使用过滤器查询优化 Elasticsearch aggs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645230/

相关文章:

mysql - 在庞大的数据集上使用 IN 是个好主意吗?

c# - 使用 NEST C# 的 ElasticSearch 2.x GeoPoint 映射

mapping - ElasticSearch 映射 Charfilter

linux - ELK堆栈和Web应用程序位于不同的服务器上,如何从后到前提供日志?

javascript - HTML 表过滤器生成器不起作用

javascript - 定制 ES6 数组过滤的结果

elasticsearch - Elasticsearch 中的嵌套 bool 查询

arrays - UITableView SearchBar过滤查询

mysql - 多IF条件的查询优化,mysql查询中的ORDER BY

mysql - 使用 GROUP BY 按时函数优化 MySQL 查询