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访问

elasticsearch基本操作(ES7.x入门)_字段

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里

例:

elasticsearch基本操作(ES7.x入门)_字段_02

 指定id,当指定了id的时候,如果数据不存在,则更新,如果不存在,则创建。

另外,也可以不用_doc,使用_create

POST /索引名/_doc/id


POST /索引名/_create/id

参数以json格式放body里

elasticsearch基本操作(ES7.x入门)_字段_03

 3.6 查询文档

3.6.1 根据id查询

GET 索引名/_doc/文档id

例: shopping/_doc/1055

3.6.2 查询全部

GET 索引名/_search

例:shopping/_search

elasticsearch基本操作(ES7.x入门)_分词器_04

3.6.3 查询全部

将参数放在请求体里

{
"query":{
"match_all":{
}
}
}

elasticsearch基本操作(ES7.x入门)_analyzer_05

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  高级条件查询

将查询参数放在请求体里

elasticsearch基本操作(ES7.x入门)_es_06

 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
}

elasticsearch基本操作(ES7.x入门)_es_07

 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
}

elasticsearch基本操作(ES7.x入门)_字段_08

 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 查看全部索引模板

ip/_template

3.20.2 查看某个索引模板的内容

ip/_template/索引模板名称*

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"
}
}
}