当前位置: 首页 > 面试题库 >

带有嵌套聚合的Elasticsearch查询导致内存不足

令狐宣
2023-03-14
问题内容

我安装了16gb内存的Elasticsearch。我开始使用聚合,但是在尝试发出以下查询时遇到“
java.lang.OutOfMemoryError:Java堆空间”错误:

POST /test-index-syslog3/type-syslog/_search
{
    "query": {
        "query_string": {
           "default_field": "DstCountry",
           "query": "CN"
        }
    },
    "aggs": {
        "whatever": {
            "terms": {
                "field" : "SrcIP"
            },
            "aggs": {
                "destination_ip": {
                    "terms": {
                        "field" : "DstIP"
                    },
                    "aggs": {
                        "port" : {
                            "terms": {
                                "field" : "DstPort"
                            }
                        }
                    }
                }
            }
        }
    }
}

query_string本身仅返回1266次匹配,因此OOM错误让我有些困惑。

我是否正确使用了聚合?如果没有,我该怎么做才能解决此问题?谢谢!


问题答案:

您正在将整个SrcIP-,DstIP-和-
DstPort字段加载到内存中以进行汇总。这是因为Elasticsearch不会反转整个字段,以便能够快速查找给定ID的字段的文档值。

如果您要在很小的一组数据上进行汇总,则应考虑使用docvalues。然后,以一种易于存储的方式存储文档的值(在给定文档ID的情况下)。它有更多的开销,但是那样一来,您就可以将其留在操作系统的字段缓存中以在内存中存储相关的页面,而不必加载整个字段。



 类似资料:
  • 问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:

  • 我有一个带有嵌套映射的索引。我想预先形成一个查询,该查询将返回以下内容:给我搜索词中每个单词出现在一个或多个嵌套文档中的所有文档。 以下是索引: 以下是我尝试的最新查询: 例如,如果我搜索单词“食物和水”,我希望每个单词至少出现在嵌套文档中。即使只有一个单词存在,当前搜索也会返回文档 谢谢你的帮助! 更新:正如克里斯托所建议的,解决方案有效。现在我有以下问题。 这是我的索引: 我要执行的查询是,如

  • 我正在努力编写一个具有多个和/或条件的弹性搜索查询。 它的基本逻辑如下: 正如docs中提到的,如果一个文档只满足must子句,那么它就被认为是匹配的。在这种情况下,should子句起到增强作用,即如果文档除了mouth子句之外还匹配一个或多个should子句,那么它将具有更高的相关性得分,假设cond2、cond3和cond4是计算相关性得分的查询。 问题是我只想要至少匹配OR条件之一的文档。

  • 下面嵌套的ElasticSearch查询返回一些不应该命中的结果。许多结果不包含请求的订单号,但仍然列出了。我没有得到所有的文档,所以查询肯定会在某种程度上减少结果集。 查询结果(截断): 正如您所看到的,有一个点击(实际上,有相当多的点击)不应该出现,因为没有一个订单包含请求的订单号。 这是的映射: 最后,以下是澄清上述映射中所述的分析器的设置:

  • **我试图聚合和找到价格范围,如果在基础上的嵌套报价数组(嵌套数组)的sellerInfoES对象。内部字段是"offerPrice"。如何在Elasticsearch中的嵌套数组字段上编写聚合。我尝试了以下查询,但它不工作。获取此错误:解析失败[在[price_ranges]中找到两个聚合类型定义:[嵌套]和[过滤器]] 映射: 查询:

  • 如何聚合一个值在嵌套在Elasticsearch嵌套位置?我对一个嵌套对象没有问题,但在嵌套对象内的嵌套我感到困惑... 样本数据: 欲望结果: 在索引映射中,我将cat_a和条目字段的类型设置为嵌套,当我从工具字段查询聚合时,在cat_a的根(级别1)中没有问题,并且可以工作,但是在聚合中在rx_a(这是在第2级)我不能检索结果,它或空或显示错误,因为我的错误查询。 查询级别1 agg: 如何处