ElasticSearch使用(2)——增删查改

参考地址:https://blog.csdn.net/Zereao/article/details/89378283

基本格式

1、ElasticSearch是基于Restful API进行的数据库操作,基本格式如下:http://<ip>:<port>/<索引>/<类型>/<文档 id>

2、从ES7.0.0开始,Type就被移除了,所以路径格式变成了: http://<ip>:<port>/<索引>/_doc/<文档ID>

请求工具

1、使用elasticsearch-head插件,在页面提交请求

2、使用Postman等第三方HTTP客户

3、使用的IntelliJ IDEA的 Http Request工具,编写http文件

创建索引

http文件如下:

###  创建一个新的 people 索引,注意,将IP替换为你们自己的主机地址
PUT http://10.247.63.97:9200/people
Content-Type: application/json
 
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "type": {"type": "keyword"},
      "name": {"type": "text"},
      "country": {"type": "keyword"},
      "age": {"type": "integer"},
      "date": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
      }
    }
  }
}
  • settings字段:用于指定我们索引的配置
    •  number_of_shards:  指定当前索引的分片数
    •  number_of_replicas: 指定当前索引的备份数
  • mappings字段:指定索引的数据映射定义:
    • properties:指定索引的属性定义;这里,这里,定义了 5 个字段,分别为 type、name、country、age、date;需要注意的是,这里的type,这是一个字段,和我们上文中提到的在7.0中移除了的类型(Type)并不是同一个东西;官方推荐我们的是,如果我们有 类型(Type)定义 这个需求,我们可以在字段中自定义一个字段,用来标识当前 document 属于哪个 Type;这里,我们就使用这个名为 “type” 字段(可以按照自己的习惯自定义名称),来标识当前文档属于哪个 Type;
    • 后面的 {"type" : "integer"}、{"type" : "text"}分别表示当前字段数据的类型为 整数、文本,以及 关键字(keyword)、日期类型等。
    • date字段中,我们可以为其指定匹配多种格式,使用 || 分隔;

数据插入

  • 指定文档ID插入:
###  向 people索引中插入一条  指定ID的数据,注意请求方式为 PUT
# 路径格式为 http://<ip>:<port>/<索引>/_doc/<文档ID>,下面我们插入了一条 ID 为 1 的数据
PUT http://10.247.63.97:9200/people/_doc/1
Content-Type: application/json
 
{
  "type": "man",
  "name": "Zereao",
  "country": "China",
  "age": "23",
  "date": "1995-11-27"
}
  • 自动生成ID插入:
###  向 people索引中插入一条  自动生成ID的数据,注意,请求方式为 POST,并删除URL末尾的 ID
POST http://10.247.63.97:9200/people/_doc/
Content-Type: application/json
 
{
  "type": "man",
  "name": "AutoZereao",
  "country": "China",
  "age": "23",
  "date": "1995-11-27 12:25:35"
}

数据修改

###  修改 ID 为 1 的文档的 name 字段值为 UpdateZereao,格式:{index}/_update/{id}
POST http://10.247.63.97:9200/people/_update/1/
Content-Type: application/json
 
{
  "doc": {
    "name": "UpdateZereao"
  }
}

删除操作

  • 文档删除
###  删除 people索引中 ID = 1 的文档
DELETE http://10.247.63.97:9200/people/_doc/1/
Content-Type: application/json
  • 索引删除:最简单的方式是通过head插件进行删除

查询操作

ES的查询可以分为简单查询、条件查询、聚合查询。

  • 简单查询:
###  简单查询,查询 book 索引中,ID为1 的文档
GET http://10.247.63.97:9200/book/_doc/1
Content-Type: application/json

 

  • 条件查询:
### 条件查询,查询所有数据
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "query": {
    "match_all": {}
  }
}
### 条件查询,指定返回数据大小以及从哪里开始返回
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "query": {
    "match_all": {}
  },
  "from": 1,
  "size": 1
}


关键词匹配:

### 条件查询,查询标题中包含 传 字的文档
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "query": {
    "match": {
      "title": "传"
    }
  }
}


这里,将会查出两条数据。默认情况下,查询出的结果 hits json数组中的数据,是按照_score字段的值大小倒序排序的。我们也可以指定排序方式:

### 条件查询,指定排序方式为 按照 publish_date 降序 排序
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "query": {
    "match": {
      "title": "传"
    }
  },
  "sort": [
    {
      "publish_date": {
        "order": "desc"
      }
    }
  ]
}


聚合查询:

单个分组聚合:

###   聚合查询,按照 这一批 book 的字数进行聚合;  这是一个单个分组聚合
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "aggs": {
    "group_by_word_count": {
      "terms": {
        "field": "word_count"
      }
    }
  }
}


注意,上面的 group_by_word_count 表示该聚合的名称,是自定义的,可以自己为该聚合命名。

多个分组聚合:

###   聚合查询,按照 这一批 book 的字数和出版日期进行聚合;  这是一个多个分组聚合
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "aggs": {
    "group_by_word_count": {
      "terms": {
        "field": "word_count"
      }
    },
    "group_by_publish_date": {
      "terms": {
        "field": "publish_date"
      }
    }
  }
}


计算某一字段的数据:

###   聚合查询,计算 word_count 字段的相关数据
POST http://10.247.63.97:9200/book/_search
Content-Type: application/json
 
{
  "aggs": {
    "grades_word_count": {
      "stats": {
        "field": "word_count"
      }
    }
  }
}


这里,grades_word_count也是可以自定义的,stats表示对字段值进行计算。执行后,我们可以得到一段这样的数据:

如图,上面计算除了 word_count 字段的 最大值、最小值、均值、数量、总和等数据。
 

 

Guess you like

Origin blog.csdn.net/chenxy02/article/details/103493024