2、elasticseatch 获取、更新、删除数据

获取

简单获取

GET /user/_doc/1
// 获取user下id为1的数据

GET /user/_source/1
// 获取user下id为1的源数据

 

通过 url 查询数据

GET _search?q="明明"
// 从所有的index中查找

GET user/_search?q=1
// 从某个index中查找

 

通过 request body 查询数据

 

1、全文查询

match 查询

// match 为模糊查询,只要找到 keyword 里某个分词就能匹配到
GET user/_search
{
  "query": {
    "match": {
      "name": ""
    }
  },
    "from":0,
    "size":1
}
// 查询 user下 name 字段带有 “明” 的数据 。从0开始,匹配一条

 

match 也可以做 fuzzy 模糊查询

GET user/_search
{
  "query": {
    "match": {
      "name":{
        "query": "zhong",
        "fuzziness": 1
      }
    }
  }
}

 

match_phrase 短语查询。

结果中的 keyword 必须与 搜索的 keyword 必须连着,顺序也要保持一致

GET user/_search
{
  "query": {
    "match_phrase": {
      "name": "ha ha"
    }
  }
}

 

 multi_match 多字段查询

GET user/_search
{
  "query": {
    "multi_match": {
      "query": "imname",
      "fields": ["name","address"]
    }
  }
}
// 在name和address中查询

GET user/_search
{
  "query": {
    "multi_match": {
      "query": "imname",
      "fields": ["name","address^2"]
    }
  }
}
// 给address权重*2,这样排序就会更靠前

 

query string (类似match,但是match必须指定字段名)

GET user/_search
{
  "query": {
    "query_string": {
      "default_field": "name", // 可以选择是否指定字段名,不指定就索引全部
      "query": "明 OR 1" // keyword可以 用 AND OR 等字段
    }
  }
}

 

match_all 查询某个index下所有数据

GET user/_search
{
  "query": {
    "match_all": {}
  }
}
// 查询 user 下所有的数据

 

2、term 级别查询

term 查询

GET user/_search
{
  "query": {
    "term": {
      "name": {
        "value": "I am value"
      }
    }
  }
}
// term级别查询,是直接查询,不做分词,不会大小写转换。
// 若是存储时是按照分词存储的话,直接查是查不到的

// 注:分词存储的时候,默认所有分词都会转为小写

 

range 查询

GET user/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 30
      }
    }
  }
}
// 查询age字段,>=20岁,<=30岁

 

exists 查询

GET user/_search
{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}

// 查询带有name字段的数据

 

fuzzy 模糊查询

GET user/_search
{
  "query": {
    "fuzzy": {
      "name": "zhong"
    }
  }
}
// 即便 zhang 输成 zhong 也能找到 zhang 的数据

 

3、复合查询

must:必须匹配,查询上下文,加分

should:应该匹配,查询上下文,加分

must_not:必须不匹配,过滤上下文,过滤

filter:必须匹配,过滤上下文,过滤

GET user/_search
{
  "query": {
    "bool": {
      "must": [ // state 必须=tn
        {
          "term": {
            "state": {
              "value": "tn"
            }
          }
        }
      ],
      "must_not": [  // gender 必须不能为m
        {
          "term": {
            "gender": {
              "value": "m"
            }
          }
        }
      ],
      "should": [ // name应该有1
        {
          "match": {
            "name": "1"
          }
        }
      ],
      "filter": [ // age必须>=10,<=30
        {
          "range": {
            "age": {
              "gte": 10,
              "lte": 30
            }
          }
        }
      ]
    }
  }
}

 

更新

post 和 put

POST user/_doc/1
{
  "name":"看看"
}

PUT user/_doc/1
{
  "name":"看看"
}
// post 和 put 都会删除原有数据后,再进行插入。
// version 和 seq_no 都会更新

 

post 的 _update 更新

POST user/_update/1
{
  "doc":{
  "name":"看看"
  }
}
// 会在原有数据上进行增加更新
// 若是里面已经存在该键值对,则不会更新,version 和 seq_no 也不会更新

 

删除

DELETE user/_doc/1
// 删除 index 下某条数据

DELETE user
// 删除整个user

 

批量插入

POST _bulk
{"index":{"_index":"user","_id":"66"}}
{"key":"value"}
{"index":{"_index":"user","_id":"661"}}
{"key":"value"}

// 或者

POST _bulk
{"create":{"_index":"user","_id":"67"}}
{"key1":"value1"}
{"create":{"_index":"user","_id":"671"}}
{"key1":"value1"}

 

批量删除

POST _bulk
{"delete":{"_index":"user","_id":"661"}}

 

批量更新

POST _bulk
{"update":{"_index":"user","_id":"1"}}
{"doc":{"name":"小明"}}

 

posted @ 2022-02-18 22:50  JaydenQiu  阅读(357)  评论(0)    收藏  举报