在Elasticsearch中,映射的所有字段都具有stored
属性,该属性确定字段的数据是否将存储在磁盘上(除了存储整个_source
)。
默认为false
。
但是,每个分片中的每个分段在映射中的每个字段都有一个Docvalues结构。结构存储段中所有文档的字段值。
默认情况下,所有文档和字段都包含在结构中。
因此,一方面,默认情况下,Elasticsearch不存储字段的值。另一方面,它确实将值存储在Docvalues结构中。
那是什么?默认情况下Elasticsearch是否存储值?
答案 0 :(得分:0)
ES为不同目的以多种格式存储相同的字段。
例如。考虑一下:
"prop_1":{ "type":"string", "index":"not_analyzed","store":true,"doc_values":true}
prop_1
将自行存储为indexed
,doc_values
和stored
字段。最重要的是,prop_1
被存储到_source
字段以及其他字段。
如上所述,即使stored:false
,字段数据仍以多种格式保存在磁盘上。
存储字段旨在实现最佳存储,而doc值则是 快速设计了访问字段值。在执行期间 查询许多doc值字段是为候选命中访问的,所以 访问必须快速。这就是你应该使用doc值的原因 在排序,聚合和划线中。另一方面,存储的字段应该用于顶部匹配文档的返回字段值。
现在,您可以使用doc_values
来回复字段: -
GET /_search
{
"query" : {
"match_all": {}
},
"docvalue_fields" : ["test1", "test2"]
}
文档值字段可以处理未存储的字段。所以IMO,存储的字段现在没有任何意义。