我有一个像这样的字段“位置”
"location": {
"type": "string",
"index": "not_analyzed",
"store": true,
"fielddata": {
"format": "doc_values"
}
},
Run Code Online (Sandbox Code Playgroud)
但是,当我在这个字段中使用术语聚合时,我看到了这种日志
[2015-05-13 15:42:56.210][DEBUG][index.fielddata.plain] Global-ordinals[location][361372] took 206 ms
[2015-05-13 17:55:44.692][DEBUG][index.fielddata.plain] Global-ordinals[location][461584] took 230 ms
[2015-05-13 17:56:21.907][DEBUG][index.fielddata.plain] Global-ordinals[location][263096] took 1205 ms
Run Code Online (Sandbox Code Playgroud)
而且我还可以看到 Java 堆大小已经增加,这导致了很长的旧垃圾收集。
为什么 doc_values 字段使用 java 堆?因为我也存储它们?我可以避免垃圾收集吗?
我看到了“ doc_values”的ES文档http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/doc-values.html说
“文档值是在索引时而不是搜索时生成的”,那么如果使用doc_values将生成什么?
“ doc值是预先构建的,并且初始化速度要快得多”,为什么它要快得多?
“但是没有使用堆内存”,那么使用页面缓存吗?
有人可以向我解释doc_values的实现方式以及何时使用吗?我定期用jstat检查我的堆使用情况,我发现我还有足够的空间使用。