• 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

  • 相关阅读:
    php面试题
    php最基本的缓存之一页面缓存
    原生PHP生成验证码
    原生PHP实现上传大图片与缩略图
    PHP实现连接数据库下载与导入csv格式文件
    ScrollTop火狐谷歌不兼容
    今天学的是 HTML基本元素、基本语法元素特点等,就发图片吧。
    第三天的学习知识HTML5常用的重要单词
    第二天学习了设计方面的知识
    HTLM5第一天的内容
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14037214.html
Copyright © 2020-2023  润新知