默认情况下Elasticsearch是否存储字段值?

时间:2017-03-11 00:39:21

标签: elasticsearch lucene

在Elasticsearch中,映射的所有字段都具有stored属性,该属性确定字段的数据是否将存储在磁盘上(除了存储整个_source)。

默认为false

但是,每个分片中的每个分段在映射中的每个字段都有一个Docvalues结构。结构存储段中所有文档的字段值。

默认情况下,所有文档和字段都包含在结构中。

因此,一方面,默认情况下,Elasticsearch不存储字段的值。另一方面,它确实将值存储在Docvalues结构中。

那是什么?默认情况下Elasticsearch是否存储值?

1 个答案:

答案 0 :(得分:0)

ES为不同目的以多种格式存储相同的字段。

例如。考虑一下:

"prop_1":{ "type":"string", "index":"not_analyzed","store":true,"doc_values":true}
  

prop_1将自行存储为indexeddoc_values和   stored字段。最重要的是,prop_1被存储到   _source字段以及其他字段。

如上所述,即使stored:false,字段数据仍以多种格式保存在磁盘上。

  

存储字段旨在实现最佳存储,而doc值则是   快速设计了访问字段值。在执行期间   查询许多doc值字段是为候选命中访问的,所以   访问必须快速。这就是你应该使用doc值的原因   在排序,聚合和划线中。另一方面,存储的字段应该用于顶部匹配文档的返回字段值。

现在,您可以使用doc_values来回复字段: -

GET /_search
{
    "query" : {
        "match_all": {}
    },
    "docvalue_fields" : ["test1", "test2"]
}

文档值字段可以处理未存储的字段。所以IMO,存储的字段现在没有任何意义。