文章目录
本文是针对 elasticsearch 6.2.2版本
使用 postman 进行相关操作
简介
CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建、查询、更改、删除,俗称“增删改查”。Elasticsearch作为NoSQL数据库(虽然ES是为搜索引擎而生的,但我更愿意将其看作带有强大文本搜索功能的NoSQL)。
elasticsearch 结构介绍
用Mysql这样的数据库存储就会容易想到建立一张User表,有balabala的字段等,在Elasticsearch里这就是一个文档,当然这个文档会属于一个User的类型,各种各样的类型存在于一个索引当中。这里有一份简易的将Elasticsearch和关系型数据术语对照表:
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
索引操作
(1)创建索引和表
PUT http://192.168.56.120:9200/mydemo
{
"setting":{
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
},
"mappings":{
"userinfos":{
"properties":{
"userid":{
"type":"integer"
},
"username":{
"type":"text"
},
"birthday":{
"type":"date",
"format":"yyyy-MM-dd||yyyy-MM-dd HH:mm:ss"
},
"say":{
"type":"text"
},
"jobtime":{
"type":"integer"
}
}
}
}
}
(2)删除索引
DELETE http://ip:9200/索引名
(3)改变表结构
POST http://192.168.56.120:9200/mydemo/userinfos/_mapping
{
"userinfos":{
"properties":{
"aliasName":{
"type":"text"
}
}
}
}
增加数据
POST http://192.168.56.120:9200/mydemo/userinfos/ //随机出id
{
"aliasName":"峨眉师太",
"username":"周芷若",
"userid":1,
"birthday":"1462-9-8",
"say":"峨嵋剑法,九阴真经",
"jobtime":18
}
http://192.168.56.120:9200/mydemo/userinfos/2 //数字是默认id
{
"aliasName":"少林方丈",
"username":"玄慈",
"userid":2,
"birthday":"1462-9-8",
"say":"易筋经,少林达摩棍",
"jobtime":68
}
修改数据
POST http://192.168.56.120:9200/mydemo/userinfos/1GHho24B-NsCrJJ68lSr/_update
// 1GHho24B-NsCrJJ68lSr 为id
{
"doc":{
"aliasName":"魔教教主",
"username":"张无忌"
}
}
删除数据
DELETE http://192.168.56.120:9200/mydemo/userinfos/1GHho24B-NsCrJJ68lSr
// 1GHho24B-NsCrJJ68lSr 为id
查询数据
(1)、ID 查询
GET http://192.168.56.120:9200/mydemo/userinfos/1WHio24B-NsCrJJ6a1TJ
(2)、简单查询
模糊查询
```bash
GET http://192.168.56.120:9200/mydemo/userinfos/_search
{
"query":{
"match":{
"username":"玄"
}
}
}
短语查询
GET http://192.168.56.120:9200/dem/students/_search
{
"query":{
"match_phrase":{
"skill":"java javascript"
}
}
}GET
多列查询
GET http://192.168.56.120:9200/dem/students/_search
{
"query":{
"multi_match":{
"query":"java",
"fields":["stuname","skill"] // 分开的词汇是 or 关系
}
},
"from":0,
"size":1
}
分组聚合查询
{
"aggs":{
"group_by_age":{
"terms":{
"field":"stuage"
}
}
}
}
分组聚合计算
{
"aggs":{
"group_by_age":{
"avg":{
"field":"stuage"
}
}
}
}
{
"aggs":{
"group_by_age":{
"stats":{
"field":"stuage"
}
}
}
}
Query String 查询【java 语法常用】
GET http://192.168.56.120:9200/dem/students/_search
{
"query":{
"query_string":{
"fields":["skill"],
"query":"java AND vue" // 词汇是 and 关系 与
}
}
}
{
"query":{
"query_string":{
"fields":["skill"],
"query":"(NOT javascript) AND mysql"
}
}
}
范围查询
GET http://192.168.56.120:9200/dem/students/_search
{
"query":{
"range":{
"stuage":{
"gte":18,
"lte":23
}
}
}
}
(3)、Filter 查询
GET http://192.168.56.120:9200/dem/students/_search
{
"query":{
"bool":{
"filter":{
"term":{
"stubir":"1997-3-6"
}
}
}
}
}
(4)、复合查询(should/must/must_not)
此方法5.0 版本后不支持多列查询
{
"query":{
"bool":{
"should":[
{
"match":{
"stuage":21
}
},
{
"match":{
"stuage":21
}
}
]
}
}
}