elasticsearch基本操作(ES7.x入门)
原创
©著作权归作者所有:来自51CTO博客作者小诸葛的博客的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.使用docker启动一个es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.2
2.浏览器输入ip:9200访问

3.基本操作
url: ip:9200
3.1 创建索引
PUT url/索引名
例:url/shopping
3.2 查看索引信息
GET url/索引名
例:url/shopping
3.3 查看全部索引
GET url/_cat/indices?v
例:url/_cat/indices?v
3.4 删除索引
DELETE url/索引名
例:url/shopping
3.5 创建文档
POST /索引名/_doc
或
POST /索引名/_create
参数以json格式放body里
例:

指定id,当指定了id的时候,如果数据不存在,则更新,如果不存在,则创建。
另外,也可以不用_doc,使用_create
POST /索引名/_doc/id
或
POST /索引名/_create/id
参数以json格式放body里

3.6 查询文档
3.6.1 根据id查询
GET 索引名/_doc/文档id
例: shopping/_doc/1055
3.6.2 查询全部
GET 索引名/_search
例:shopping/_search

3.6.3 查询全部
将参数放在请求体里
{
"query":{
"match_all":{
}
}
}

3.7 更新文档
3.7.1 全量更新(相当于先删除,后创建,只是id没变)
POST/PUT 索引名/_doc/id
参数放请求体 {}
3.7.2 部分更新:
POST 索引名/_update/id
参数:
{
"doc": {参数}
}
例:
/shopping/_update/1056
参数:
{
"doc":{
"title":"华为手机"
}
}
3.8 删除文档
DELETE 索引名/_doc/id
例: shopping/_doc/1056
3.9 条件查询
3.9.1 普通条件查询
GET 索引名/_search?q=key:value
例:shopping/_search?q=title:华为
3.9.2 高级条件查询
将查询参数放在请求体里

3.10 分页查询
GET 索引名/_search
参数:
{
"query":{
"match_all":{
}
},
"from": 2,
"size": 2
}
from:表示第几条记录
size:表示每页多少记录
from=(页码-1)*size
3.11 指定要查询的字段
GET /索引名/_search
{
"query":{
"match_all":{
}
},
"from": 2,
"size": 2,
"_source": ["title"]
}
通过 _source 指定只查询 title 字段
3.12 对查询结果进行排序
注意:如果排序时使用了分页查询,则是先排序,后分页。
GET /索引名/_search
{
"query":{
"match_all":{
}
},
"from": 2,
"size": 2,
"_source": ["title","price"],
"sort":{
"price":{
"order":"asc"
}
}
}
sort表示要对查询结果进行排序
price表示要排序的字段
order指定排序方式,升序还是降序
3.13 多条件查询
GET 索引名/_search
例: 查询category为华为的所有文档 must理解为:并且、同时成立
GET shopping/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"category":"华为"
}
}
]
}
}
}
例:查询category为华为并且price为3888的文档
GET shopping/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"category":"华为"
}
},
{
"match":{
"price":"3888"
}
}
]
}
}
}
例:查询category为华为或OPPO的文档,并按price排序 should可以理解为:或
GET shopping/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"category":"华为"
}
},
{
"match":{
"category":"OPPO"
}
}
]
}
},
"sort":{
"price":{
"order":"asc"
}
}
}
例:查询 查询category为华为或小米或OPPO的手机,并且价格大于5000,此处使用filter,gt表示大于,lt表示小于。
GET shopping/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"category":"华为"
}
},
{
"match":{
"category":"小米"
}
},
{
"match":{
"category":"OPPO"
}
}
],
"filter":{
"range":{
"price":{
"gt":5000
}
}
}
}
}
}
3.14 match、match_phrase
match:分词搜索,会把查询关键词先进行分词,然后进行搜索
例:下面的查询会把category含有小或含有华的都查出来
GET /shoppting/_search
{
"query":{
"match":{
"category":"小华"
}
}
}
match_phrase:精确查询(完全匹配)
例:下面的查询指挥查询category为小米的文档
GET /shoppting/_search
{
"query":{
"match_phrase":{
"category":"小米"
}
}
}
3.15 对查询结果的某些字段进行高亮显示(highlight)
使用highlight对查询结果的某些字段进行高亮显示
GET /shoppting/_search
{
"query":{
"match_phrase":{
"category":"小米"
}
},
"highlight":{
"fields":{
"category":{}
}
}
}
3.16 聚合查询(aggs)
aggregations:聚合
significant:重要
3.16.1 分组查询(terms)
按price字段进行分组
GET /shopping/_search
{
"aggs":{
"category_group":{
"terms":{
"field": "price"
}
}
}
}
默认会一并将所有文档信息也查出来,如果不需要查询文档信息,可以指定size为0
GET /shopping/_search
{
"aggs":{
"category_group":{
"terms":{
"field": "price"
}
}
},
"size": 0
}

3.16.2 求平均值(avg)
查询所有文档price的平均值
GET /shopping/_search
{
"aggs":{
"category_avg":{
"avg":{
"field": "price"
}
}
}
}
不查询文档详细信息
GET /shopping/_search
{
"aggs":{
"category_avg":{
"avg":{
"field": "price"
}
}
},
"size": 0
}

3.17 映射(_mapping)
映射类似与MySQL中的表设计,包括约束指定字段的类型(text、keyword等)。text类型的字段支持分词,keyword类型的字段不支持分词、必须完全匹配。
keyword类型的字段才支持聚合查询(例如:分组)
通过type指定字段类型,通过index指定该字段是否可以被索引查询,当index为false时,将无法通过该字段进行查询。
GET /user/_mapping
{
"properties":{
"name":{
"type": "text",
"index": true
},
"sex":{
"type": "text",
"index": true
},
"tel":{
"type": "text",
"index": true
},
"province":{
"type":"keyword",
"index":"true"
}
}
}
3.18 分片
分片类似MySQL中的分表,创建索引时,默认3个分片,这个分片数量是可以修改的。
PUT 索引名/_settings
{
"number_of_replicas":2
}
3.19 文档分析
analyzer常见值
standard:标准分词器
ik_max_word:会将文本做最细粒度的拆分
ik_smart:会将文本做最粗粒度的拆分
GET /_analyze
analyzer为分词器的名称,standard为默认的分词器,可以安装分词器插件。
{
"analyzer":"standard",
"text":"this is my blog"
}
3.20 索引模板
3.20.1 查看全部索引模板
3.20.2 查看某个索引模板的内容
3.20.3 创建索引模板
注意!!!es7以后,一个索引不再支持多个数据类型,只有一个默认的_doc。
创建一个名为mytemplate的索引模板,当创建名为mysqlaudit-开头的索引时生效。
PUT /_template/mytemplate
{
"order":1,
"index_patterns":["mysqlaudit-*"],
"mappings":{
"properties":{
"middleware_name":{
"type":"keyword",
"index":true
},
"k8s_pod_namespace":{
"type":"keyword",
"index":true
},
"query":{
"type":"text",
"index":true,
"analyzer":"ik_max_word"
}
}
},
"settings":{
"index": {
"max_result_window": "30000000"
}
}
}