目前我们面临很多例外情况:
ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException: Data too large, data for field [field1] would be larger than limit of [24108466176/22.4gb]]
在对上述异常进行一些调查后,field1
似乎占用了很多fielddata cache size
以及另一个字段,我们称之为field2
GET /_stats/fielddata?fields=field1,field2
的结果:
"total": {
"fielddata": {
"memory_size_in_bytes": 260456614595,
"evictions": 1226307,
"fields": {
"field1": {
"memory_size_in_bytes": 76629429704
},
"field2": {
"memory_size_in_bytes": 97600838429
}
}
}
}
注意:这两个字段均为not_analyzed
。 Field1在搜索查询中使用很多,而field2则没有那么多。
因此,通过es文档的doc value部分,这些字段可以存储为doc values
以减少堆使用。
这是解决上述异常等内存问题的好方法吗?
文档还说,通过将字段存储为doc值,索引会变大,有没有办法计算这个增加量?
答案 0 :(得分:0)
Doc_Values
太棒了!
对于新索引,这些字段的fielddata size
为0:
"total": {
"fielddata": {
"memory_size_in_bytes": 5394813851,
"evictions": 112,
"fields": {
"field1": {
"memory_size_in_bytes": 0
}
}
}
}
在对这些字段执行查询时不再有Data too large
个例外,更不用说现在这些查询的执行速度要快得多,我想因为CircuitBreaker
经常不会绊倒。< / p>
为了表现......索引的减少非常轻微,没什么可担心的。