ES mget、bulk、mappings

2022-12-31 16:30:34 浏览数 (1)

文章目录
  • 1. mget 批量查询
  • 2. bulk 批量写入
  • 3. 条件删除
  • 4. 条件更新
  • 5. 映射 mappings
  • 6. 自动映射
  • 7. 显式映射

1. mget 批量查询

  • 批量查询
代码语言:javascript复制
GET _mget
{
  "docs": [
    {
      "_index": "test_index",
      "_id": 1
    },
    {
      "_index": "kibana_sample_data_flights",
      "_id": "frc8U4UBIo5EnYllKV0t"
    }
  ]
}

输出

代码语言:javascript复制
{
  "docs": [
    {
      "_index": "test_index",
      "_id": "1",
      "_version": 3,
      "_seq_no": 11,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "name": "test_new",
        "value": 100,
        "alisa": "名称"
      }
    },
    {
      "_index": "kibana_sample_data_flights",
      "_id": "frc8U4UBIo5EnYllKV0t",
      "_version": 1,
      "_seq_no": 8373,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "FlightNum": "5EKI6QP",
        "DestCountry": "CN",
        "OriginWeather": "Rain",
        "OriginCityName": "London",
        "AvgTicketPrice": 1028.3575673252506,
        "DistanceMiles": 5761.935055291024,
        "FlightDelay": true,
        "DestWeather": "Sunny",
        "Dest": "Shanghai Pudong International Airport",
        "FlightDelayType": "Late Aircraft Delay",
        "OriginCountry": "GB",
        "dayOfWeek": 5,
        "DistanceKilometers": 9272.935609622278,
        "timestamp": "2023-01-14T19:36:28",
        "DestLocation": {
          "lat": "31.14340019",
          "lon": "121.8050003"
        },
        "DestAirportID": "PVG",
        "Carrier": "JetBeats",
        "Cancelled": false,
        "FlightTimeMin": 902.3525435444484,
        "Origin": "London Gatwick Airport",
        "OriginLocation": {
          "lat": "51.14810181",
          "lon": "-0.190277994"
        },
        "DestRegion": "SE-BD",
        "OriginAirportID": "LGW",
        "OriginRegion": "GB-ENG",
        "DestCityName": "Shanghai",
        "FlightTimeHour": 15.03920905907414,
        "FlightDelayMin": 240
      }
    }
  ]
}
  • 同 一个 index 可以简写
代码语言:javascript复制
GET test_index/_mget
{
  "docs": [
    {
      "_id": 1
    },
    {
      "_id": 2
    }
  ]
}

or

代码语言:javascript复制
GET test_index/_mget
{
  "ids": [
    1,
    2
  ]
}

2. bulk 批量写入

写入一条

代码语言:javascript复制
POST _bulk
{"create":{"_index":"test_index","_id":3}}  # action, create 可以改成 index(替换doc)
{"name":"test_new1","value":[1,2,3]}  # data 这两行不能分在多行

写入多条,注意 create、index 的区别

代码语言:javascript复制
POST _bulk
{"create":{"_index":"test_index","_id":3}}
{"name":"test_new3","value":[1,2,3]}
{"create":{"_index":"test_index","_id":4}}
{"name":"test_new4","value":4}
{"index":{"_index":"test_index","_id":5}}
{"name":"test_new5","value":5}

or 同一index可简写

代码语言:javascript复制
POST test_index/_bulk
{"create":{"_id":3}}
{"name":"test_new3","value":[1,2,3]}
{"create":{"_id":4}}
{"name":"test_new4","value":4}
{"index":{"_id":5}}
{"name":"test_new5","value":5}
代码语言:javascript复制
{
  "took": 168,
  "errors": true,
  "items": [
    {
      "create": {
        "_index": "test_index",
        "_id": "3",  # 已经存在,create 报错
        "status": 409,
        "error": {
          "type": "version_conflict_engine_exception",
          "reason": "[3]: version conflict, document already exists (current version [2])",
          "index_uuid": "ntM1X5SOTxiz8tRVwdHK6g",
          "shard": "0",
          "index": "test_index"
        }
      }
    },
    {
      "create": {
        "_index": "test_index",
        "_id": "4",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 1,
          "failed": 0
        },
        "_seq_no": 15,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "test_index",
        "_id": "5",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 1,
          "failed": 0
        },
        "_seq_no": 16,
        "_primary_term": 1,
        "status": 201
      }
    }
  ]
}

update 更新

代码语言:javascript复制
POST _bulk
{"update":{"_index":"test_index","_id":3}}
{"doc":{"value":3}}
{"update":{"_index":"test_index","_id":4}}
{"doc":{"name":"test_new44"}}
{"update":{"_index":"test_index","_id":5}}
{"doc":{"name":"test_new55","value":55}}

or 简写

代码语言:javascript复制
POST test_index/_bulk
{"update":{"_id":3}}
{"doc":{"value":3}}
{"update":{"_id":4}}
{"doc":{"name":"test_new44"}}
{"update":{"_id":5}}
{"doc":{"name":"test_new55","value":55}}

delete 删除

代码语言:javascript复制
POST _bulk
{"delete": {"_index": "test_index", "_id": 3}}
{"delete": {"_index": "test_index", "_id": 4}}

or

代码语言:javascript复制
POST test_index/_bulk
{"delete": {"_id": 5}}
{"delete": {"_id": "ZLcgV4UBIo5EnYlljo2Q"}}

3. 条件删除

代码语言:javascript复制
POST test_index/_delete_by_query
{
  "query": {
    "term": {
      "value": 100
    }
  }
}

输出

代码语言:javascript复制
{
  "took": 297,
  "timed_out": false,
  "total": 1,
  "deleted": 1,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1,
  "throttled_until_millis": 0,
  "failures": []
}

检查 value = 100 的 doc 已被删除

代码语言:javascript复制
GET test_index/_search

4. 条件更新

代码语言:javascript复制
POST test_index/_update_by_query
{
  "query": {
    "term": {
      "value": 99
    }
  },
  "script": {
    "source": "ctx._source['value'] = 199"
  }
}

更新 query 条件下(value=99)的 doc,将其 value 改为 199

输出

代码语言:javascript复制
{
  "took": 307,
  "timed_out": false,
  "total": 1,
  "updated": 1,
  "deleted": 0,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1,
  "throttled_until_millis": 0,
  "failures": []
}

5. 映射 mappings

查询映射

代码语言:javascript复制
GET test_index/_mapping

输出

代码语言:javascript复制
{
  "test_index": {
    "mappings": {
      "properties": {
        "alisa": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "value": {
          "type": "long"
        }
      }
    }
  }
}

查看单个字段的属性

代码语言:javascript复制
GET test_index/_mapping/field/value

输出

代码语言:javascript复制
{
  "test_index": {
    "mappings": {
      "value": {
        "full_name": "value",
        "mapping": {
          "value": {
            "type": "long"
          }
        }
      }
    }
  }
}

6. 自动映射

dynamic mappings 建立 index 的时候没有设置 mapping,根据你的 value 自动推断类型

ES 不支持修改字段类型、没有隐式转换(比如 “123” 不会当成 数字 123)、建议指定 mapping

7. 显式映射

代码语言:javascript复制
PUT test_index1
{
  "mappings": {
    "properties": {
      "price": {
        "type": "float"
      },
      "name": {
        "type": "keyword"
      },
      "desc": {
        "type": "text"
      }
    }
  }
}

查看 mapping

代码语言:javascript复制
GET test_index1/_mapping

数据类型 见 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

映射参数 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html

  • coerce,是否允许强制类型转换
  • copy_to,把字段的值 copy 到对应字段中,不可见,但是可查
  • doc_values,设置为 false ,不能对该字段进行排序,聚合查询,可以减少磁盘占用
  • enable,index 是否被索引,或者 object 字段是否被索引
  • ignore_above,对超过长度的字段,搜索时无法搜索到
  • index,字段是否可以被索引
  • fields,可以创建多个子字段
  • norms,是否禁用评分(评分可用来排序)
  • store,加速查询 store 过的字段

0 人点赞