【ElasticSearch8.X】学习笔记
四、基础操作
在本人blog中ElasticSearch7.x使用postman进行演示过基础操作
因此在ElasticSearch8.x通过Kibana进行演示
4.1、索引操作
4.1.1、创建索引
ES 软件的索引可以类比为 MySQL 中表的概念,创建一个索引,类似于创建一个表
ES 不允许修改索引
# 创建索引
# PUT+索引名
PUT myindex
# 增加索引带自定义配置(JSON格式)
PUT test_index
{
"aliases": {
"test1": {}
}
}
4.1.2、查询指定索引
根据索引名称查询指定索引,如果查询到,会返回索引的详细信息
# 查询索引
# GET 索引名称
GET myindex
4.1.3、查询所有索引
这里请求路径中的_cat 表示查看的意思,indices表示索引,所以整体含义就是查看当前 ES 服务器中的所有索引
# 查询索引
GET _cat/indices
4.1.4、 删除索引
删除指定已存在的索引
# 删除索引
# DELETE+索引名称
DELETE test_index
4.2、文档操作
4.2.1、创建文档
这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式
如果在创建数据时,指定唯一性标识,那么请求范式 POST,PUT 都可以
如果没有指定数据唯一性标识,只能使用 POST 请求
# 创建文档
# 创建文档
POST myindex/_doc/001
{
"id" : 1001,
"name" : "zhangsan",
"age" : 30
}
POST myindex/_doc/002
{
"id" : 1002,
"name" : "lisi",
"age" : 18
}
POST myindex/_doc/003
{
"id" : 1004,
"name" : "wangwu",
"age" : 30
}
POST myindex/_doc/004
{
"id" : 1004,
"name" : "zhaoliu",
"age" : 35
}
4.2.2、查询文档
根据唯一性标识可以查询对应的文档
# 查询文档
GET myindex/_doc/001
4.2.3、修改文档
修改文档本质上和新增文档是一样的,如果存在就修改,如果不存在就新增
# 修改文档
PUT myindex/_doc/001
{
"age":20
}
4.2.4、删除文档
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)
# 删除文档
DELETE myindex/_doc/001
4.2.5、查询所有文档
# 查询所有文档
GET myindex/_search
4.3、数据搜索
4.3.1、匹配查询文档
这里的查询表示文档数据中 JSON 对象数据中的 name 属性是
lisi
GET myindex/_search
{
"query": {
"match": {
"name": "lisi" #不会查出li si 此时查询关键字是lisi 而li si 的关键词是两个【li】【si】匹配不上
}
}
}
GET myindex/_search
{
"query": {
"term": {
"name": {
"value": "li si" #会查出li si 不会查出lisi 此时关键字是li si
}
}
}
}
4.3.2、匹配查询字段
默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。如果我们只想获取其中的部分字段,我们可以添加_source 的过滤
GET myindex/_search
{
"_source": ["name","age"],
"query": {
"term": {
"name": {
"value": "lisi"
}
}
}
}
4.3.3、组合"or"
GET myindex/_search
{
"_source": ["name","age"],
"query": {
"bool": {
"should": [
{
"match": {
"name": "lisi"
}
},
{
"match": {
"age": 35
}
}
]
}
}
}
4.3.4、排序
GET myindex/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
4.3.5、分页
GET myindex/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2
}
4.3.6、分组
GET myindex/_search
{
"aggs": {
"ageGroup": {
"terms": {
"field": "age"
}
}
},
"size": 0 #只显示分组信息 不显示源信息
}
4.3.7、平均值
GET myindex/_search
{
"aggs": {
"ageAvg": {
"avg": {
"field": "age"
}
}
},
"size": 0
}
4.3.8、求和
GET myindex/_search
{
"aggs": {
"ageGroup": {
"terms": {
"field": "age"
},
"aggs": {
"ageSum": {
"sum": {
"field": "age"
}
}
}
}
},
"size": 0
}
4.3.9、TopN
GET myindex/_search
{
"aggs": {
"Top3": {
"top_hits": {
"sort": [
{
"age": {
"order": "desc"
}
}
],
"size": 3
}
}
},
"size": 0
}
五、 索引模板
我们之前对索引进行一些配置信息设置,但是都是在单个索引上进行设置。在实际开发中,我们可能需要创建不止一个索引,但是每个索引或多或少都有一些共性。比如我们在设计关系型数据库时,一般都会为每个表结构设计一些常用的字段,比如:创建时间,更新时间,备注信息等。elasticsearch 在创建索引的时候,就引入了模板的概念,你可以先设置一些通用的模板,在创建索引的时候,elasticsearch 会先根据你创建的模板对索引进行设置。
5.1、创建模板
# 模板名称小写
PUT _template/mytemplate
{
"index_patterns" : [
"my*"
],
"settings" : {
"index" : {
"number_of_shards" : "1"
}
},
"mappings" : {
"properties" : {
"now": {
"type" : "date",
"format" : "yyyy/MM/dd"
}
}
}
}
5.2、查看模板
GET /_template/mytemplate
5.3、验证模板是否存在
HEAD /_template/mytemplate
5.4、 创建索引
在创建索引的时候已经定义匹配的索引了 以my开头
PUT mytest
5.5、删除模板
DELETE /_template/mytemplate
版权归原作者 擅长开发Bug的Mr.NaCl 所有, 如有侵权,请联系我们删除。