ElasticSearch(三)简单的增删改查

编程

今天我们来讲一下ES的增删改查,这块内容有助于理解下周的SpringBoot集成ES的代码。

首先,我们先创建一个索引estest的索引,接下来要是都截图的话,阅读流畅性太低了,所以接下来会用简写的形式[请求类型 URL]。如下图。将简写为

PUT localhost:9200/estest

RqeustBody:

    { "settings": { "number_of_shards": 1 }}

ResponseBody:

{

"acknowledged": true,

"shards_acknowledged": true,

"index": "estest"

}

然后我们向一个user的类型中添加一条数据。方式一,是让ES自动创建一个ID主键,如果我们要使用我们自己的主键,可以看看第二种方法。

方法一:

POST localhost:9200/estest/user/

RqeustBody:

{

    "name": "张三",

    "age": 17,

    "name_and_age": "张三17",

    "is_man": true,

    "birthday": "2019-01-01"

}

ResponseBody:

{

    "_index":"estest",

    "_type":"user",

    "_id":"-plY_HABLAPQJei9q-lc",      //返回ID 重点

    "_version":1,

    "result":"created",

    "_shards":{

        "total":2,

        "successful":1,

        "failed":0

    },

    "_seq_no":0,

    "_primary_term":1

}

方法二:

POST localhost:9200/estest/user/1 //重点,后面带来一个id值

RqeustBody:

{

    "name": "李四",

    "age": 17,

    "name_and_age": "李四17",

    "is_man": true,

    "birthday": "2019-01-01"

}

ResponseBody:

{

    "_index": "estest",

    "_type": "user",

    "_id": "1",                 //返回ID 重点

    "_version": 1,

    "result": "created",

    "_shards": {

        "total": 2,

        "successful": 1,

        "failed": 0

    },

    "_seq_no": 1,

    "_primary_term": 1

}

现在要删除李四这个人。我们使用DELETE请求,在索引和类型后面加ID就完事儿了。

DELETE localhost:9200/estest/user/1

但是,如果我们要删除指定名字的数据,比如说我们要删除张三的数据,可以使用下面的请求。

POST localhost:9200/estest/user/_delete_by_query

RqeustBody:

{

  "query": {

    "match": {

      "name": "张三"

    }

  }

}

我们再次插入张三的数据。现在想更新一下张三的年龄,可以使用方法一,在索引和类型的后面加上_update_by_query,再在里添加查询条件。。想方法二是根据ID更新数据。

方法一:

POST localhost:9200/estest/user/_update_by_query

RequestBody:

{

  "script": {

        "source":"ctx._source.age=18;"

  },

  "query": {

    "match": {

    "name":"张三"

    }

  }

}

方法二

POST localhost:9200/estest/user/_5lp_HABLAPQJei9cuke

RequestBody:

{

    "birthday": "2019-01-01",

    "name_and_age": "张三17",

    "name": "张三",

    "is_man": true,

    "age": 18

}

终于,增删改结束,虽然只是介绍了一下简单的用法,我感觉已经累的不行了,吗呀,这个查询才是重点,可恶。

我们现在要查询张三这个用户,要咋查呢?

GET localhost:9200/estest/user/_search

RequestBody:

{

  "query": {

    "match": {

    "name":"张三"

    }

  }

}

好了,重点终于,match,match啊。match的意思是匹配的意思,这个很有意思,因为ES里面有一个分词器,可以模糊匹配,现在我们放入一些其他的张三数据。可以看到名字为张三123123的匹配程度最低,只有0.12多,其他的为0.15。

那我们要是想精确匹配,可以使用trim。上一段介绍了一下分词系统,由于一开始没有给索引建立映射,ES自动把name字段进行了分词,导致我们无法精确匹配名字为张三的数据。所以改用age来测试term,虽然用match也会有一样的效果。match和term从文档上看,没啥子区别,match的适用范围更加广一些。

GET localhost:9200/estest/user/_search

RequestBody:

{

  "query": {

    "match": {

    "age": 18

    }

  }

}

现在查询一下年龄大于15岁的人。由于是使用请求体的形式,所以不能用<,<=,>=,>这些符号,所以用这些来替代符号。

gt

大于

gte

大于等于

lt

小于

lte

小于等于

GET localhost:9200/estest/user/_search

RequestBody:

{

"query": {

"range": {

"age":{

"gt": 15

}

}

}

}

如果想查询一个字段是否为空,可以使用exists。missing在 ES5中已经被移除了。

GET localhost:9200/estest/user/_search

RequestBody:

{

"query": {

"missing": {

"field":    "age"

}

}

}

终于写完了,这个ES的查询花了我两个晚上的时间,本来想周三的时候写完,然后今天看一下Spring Security源码,分析一下的,估计要拖到下周三了,我在这里骂一句DSL真难用!

 

以上是 ElasticSearch(三)简单的增删改查 的全部内容, 来源链接: utcz.com/z/514632.html

回到顶部