21.ES基本使用
# 01.基本测试
# 1.1 测试分词功能
http://192.168.56.66:5601
GET /* # 获取所有数据
DELETE /* # 删除所有数据
GET /_analyze # 测试分词
{
"analyzer": "ik_max_word",
"text": "2001A第一帅是谁?"
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 1.2 测试添加数据
PUT test1/type1/1
{
"name":"kitty",
"age":12
}
1
2
3
4
5
2
3
4
5
# 02.商品文档的基础操作(CRUD)
# 2.1 新增商品
- 标准语法
put /index/type/id
{
k-v类型的数据
}
1
2
3
4
2
3
4
- 添加第一条数据
put /goods/fruit/1
{
"name":"xiangjiao",
"describe":"haochi tian",
"price":40,
"producer":"feilvbin",
"tags":["xiangjiao","haochi"]
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 添加第二条数据
put /goods/fruit/2
{
"name":"pingguo",
"describe":" cui",
"price":60,
"producer":"zhongguo",
"tags":["haokan","xiang"]
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 其中 goods表示要创建的索引名称(数据库),fruit表示要创建的数据类别(表),1表示插入的数据的主键,这里需要明确一个概念就是倒排索引
2.2查询商品
标准语法:
GET /index /type/id
# 2.2 查询一条数据
- 标准语法:
# GET /index /type/id
1
- 测试查询
# GET /goods/fruit/1
# 查询结果如下:
{
"_index" : "goods",
"_type" : "fruit",
"_id" : "1",
"_version" : 1, ----------------表示当前的操作版本号
"found" : true,
"_source" : { ------------------表示元数据,内部信息就是当前的这条记录信息
"name" : "xiangjiao",
"describe" : "haochi tian",
"price" : 40,
"producer" : "feilvbin",
"tags" : [
"xiangjiao",
"haochi"
]
}
}
# 注意:带下划线的都是es自带的属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 2.3 修改商品
- 标准语法
# POST /index/type/id/_update
{
"doc": {
"field": "vaule"
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
- 测试修改
# POST /goods/fruit/1/_update
{
"doc": {
"name":"yutou"
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
- 可以同时修改多条属性的值,值与值之间用”,”号间隔,还有一种非主流的写法也是可以的
# 2.4 删除操作
- 标准语法:
# DELETE /index/type/id
DELETE /goods/fruit/1
1
2
3
2
3
# 03.es查询操作
# 3.1 全部查询
- 标准语法:
# GET /index/type/_search
GET /goods/fruit/_search # 查询所有
1
2
3
2
3
查询结果说明
- took:耗费了几毫秒
- timed_out:是否超时,这里是没有
- _shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard
- hits.total:查询结果的数量,多少个document
- hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
- hits.hits:包含了匹配搜索的document的详细数据
查询结果
{
"took" : 1, # 耗费了几毫秒
"timed_out" : false, # 是否超时,这里是没有
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931472,
"hits" : [
{
"_index" : "goods",
"_type" : "fruit",
"_id" : "1",
"_score" : 0.6931472,
"_source" : {
"name" : "xiangjiao",
"describe" : "haochi tian",
"price" : 40,
"producer" : "feilvbin",
"tags" : [
"xiangjiao",
"haochi"
]
}
}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 3.2 条件查询
- name=xiangjiao的
# 方法1
GET goods/fruit/_search/?q=name:xiangjiao # 查询名字为xiangjiao的
# 方法2
GET goods/fruit/_search
{
"query": {
"match": {
"name": "xiangjiao"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3.3 按条件查询和排序
- 查询 name=pingguo 使用价格进行正向排序
GET goods/fruit/_search
{
"query": {
"match": {
"name": "pingguo"
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3.4 分页查询
- 注意: 这里的检索结果是倒排索引,不是按照id排序的,是按照倒排的方式来进行检索的,再强调下,不是根据id排序
- 每页显示两条数据
GET /goods/fruit/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3.5 只显示指定字段
- 检索出来的内容也就只包含了name和price字段的内容
GET /goods/fruit/_search
{
"query": {
"match_all": {}
},
"_source": ["name","price"],
"from": 0,
"size": 2
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 3.6 多条件匹配查询
- 查询 name=xiangjiao 并且 price=25
GET /goods/fruit/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "xiangjiao"
}
},
{
"match": {
"price": "25"
}
}
]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 查询 name=xiangjiao 或者 price=45
GET /goods/fruit/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "xiangjiao"
}
},
{
"match": {
"price": "45"
}
}
]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3.7 过滤查询
注意:filter于must/must_not/should是并列关系,同属于bool的子属性
lt:小于, lte:小于等于, gt:大于, gte:大于等于
查询
name=xiangjiao 或者 价格在 10~40
之间的水果
GET /goods/fruit/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "xiangjiao"
}
}
],
"filter": {
"range": {
"price": {
"gte": 10,
"lte": 40
}
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 3.8 全文检索
- 查询 name=pingguo 或者 name=xiangjiao的
GET /goods/fruit/_search
{
"query": {
"match": {
"name": "pingguo xiangjiao"
}
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
上次更新: 2024/3/20 16:09:51