【问题标题】:Does Elasticsearch store or not store field values by default?Elasticsearch 是否默认存储或不存储字段值?
【发布时间】:2017-03-11 00:39:21
【问题描述】:

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

默认为false。

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

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

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

那是什么? Elasticsearch 默认存储还是不存储值?

【问题讨论】:

    标签: elasticsearch lucene


    【解决方案1】:

    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_values 来返回字段作为响应:-

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

    Doc 值字段可以作用于未存储的字段。所以 IMO,存储字段现在没有任何意义。

    【讨论】:

    • 您好,谢谢您的回答。我想了解在什么物理数据结构中保存了存储字段(不是 doc 值),以及是否/为什么这种结构比 doc 值结构提供更快的单个值的影响。谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多