zoukankan      html  css  js  c++  java
  • Elasticsearch 7 : doc_values 属性

    字段的 doc_values 属性有两个值, true、false。默认为 true ,即开启。

    当 doc_values 为 fasle 时,无法基于该字段排序、聚合、在脚本中访问字段值。

    当 doc_values 为 true 时,ES 会增加一个相应的正排索引,这增加的磁盘占用,也会导致索引数据速度慢一些。

    示例1: 关闭 doc_values 属性

    创建索引

    PUT student
    {
      "mappings" : {
        "properties" : {
          "name" : {
            "type" : "keyword",
            "doc_values": false
          },
          "age" : {
            "type" : "integer",
            "doc_values": false
          }
        }
      }
    }

    插入数据

    POST _bulk
    { "index" : { "_index" : "student", "_id" : "1" } }
    { "name" : "张三", "age": 12 }
    { "index" : { "_index" : "student", "_id" : "2" } }
    { "name" : "李四", "age": 10 }
    { "index" : { "_index" : "student", "_id" : "3" } }
    { "name" : "王五", "age": 11 }

    查询数据

    POST student/_search
    {
      "query": {
        "match_all": {}
      }
    }

    执行结果:

    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "name" : "张三",
              "age" : 12
            }
          },
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "name" : "李四",
              "age" : 10
            }
          },
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "name" : "王五",
              "age" : 11
            }
          }
        ]
      }
    }

    查询数据并按照age排序,会报错

    POST student/_search
    {
      "query": {
        "match_all": {}
      },
      "sort" : [
        {"age": {"order": "desc"}}
      ],
      "from": 0,
      "size": 1
    }

    报错如下:

    {
      "error": {
        "root_cause": [
          {
            "type": "illegal_argument_exception",
            "reason": "Can't load fielddata on [age] because fielddata is unsupported on fields of type [integer]. Use doc values instead."
          }
        ],
        "type": "search_phase_execution_exception",
        "reason": "all shards failed",
        "phase": "query",
        "grouped": true,
        "failed_shards": [
          {
            "shard": 0,
            "index": "student",
            "node": "wFhSfuLwR3OX21eldbRIHg",
            "reason": {
              "type": "illegal_argument_exception",
              "reason": "Can't load fielddata on [age] because fielddata is unsupported on fields of type [integer]. Use doc values instead."
            }
          }
        ],
        "caused_by": {
          "type": "illegal_argument_exception",
          "reason": "Can't load fielddata on [age] because fielddata is unsupported on fields of type [integer]. Use doc values instead.",
          "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "Can't load fielddata on [age] because fielddata is unsupported on fields of type [integer]. Use doc values instead."
          }
        }
      },
      "status": 400
    }

    查询数据并按照 name 排序,会报错

    和基于 age 的排序报错类似。

    获取 age 平均值,会报错

    POST student/_search
    {
      "aggs":{
        "age_stat": {
          "avg": {"field": "age"}
        }
      },
      "from": 0
    }

    和上面的排序报错类似。

    示例2: 开启 doc_values 属性

    创建索引

    PUT student
    {
      "mappings" : {
        "properties" : {
          "name" : {
            "type" : "keyword",
            "doc_values": true
          },
          "age" : {
            "type" : "integer",
            "doc_values": true
          }
        }
      }
    }

    插入数据

    POST _bulk
    { "index" : { "_index" : "student", "_id" : "1" } }
    { "name" : "张三", "age": 12 }
    { "index" : { "_index" : "student", "_id" : "2" } }
    { "name" : "李四", "age": 10 }
    { "index" : { "_index" : "student", "_id" : "3" } }
    { "name" : "王五", "age": 11 }

    查询数据

    POST student/_search
    {
      "query": {
        "match_all": {}
      }
    }

    执行结果:

    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "name" : "张三",
              "age" : 12
            }
          },
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "name" : "李四",
              "age" : 10
            }
          },
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "name" : "王五",
              "age" : 11
            }
          }
        ]
      }
    }

    查询数据并按照age排序,正常执行

    POST student/_search
    {
      "query": {
        "match_all": {}
      },
      "sort" : [
        {"age": {"order": "desc"}}
      ],
      "from": 0,
      "size": 1
    }

    响应:

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : null,
            "_source" : {
              "name" : "张三",
              "age" : 12
            },
            "sort" : [
              12
            ]
          }
        ]
      }
    }

    查询数据并按照 name 排序,正常执行

    POST student/_search
    {
      "query": {
        "match_all": {}
      },
      "sort" : [
        {"name": {"order": "desc"}}
      ],
      "from": 0,
      "size": 1
    }

    响应:

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [
          {
            "_index" : "student",
            "_type" : "_doc",
            "_id" : "3",
            "_score" : null,
            "_source" : {
              "name" : "王五",
              "age" : 11
            },
            "sort" : [
              "王五"
            ]
          }
        ]
      }
    }

    获取 age 平均值,正常执行

    POST student/_search
    {
      "aggs":{
        "age_stat": {
          "avg": {"field": "age"}
        }
      },
      "from": 0,
      "size": 0
    }

    响应:

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 3,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "age_stat" : {
          "value" : 11.0
        }
      }
    }

    原文链接:https://www.letianbiji.com/elasticsearch/es7-doc-values.html

  • 相关阅读:
    Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
    Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
    Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception
    Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block
    Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)
    软件研发打油诗祝大家节日快乐
    从挖井的故事中想到开发管理中最容易忽视的几个简单道理
    ITIL管理思想的执行工具发布
    管理类软件设计“渔”之演化
    20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14037214.html
Copyright © 2011-2022 走看看