目录
一、索引操作
1、创建索引
2、查看索引
3、查看全部索引
四、删除索引
二、文档操作
1、创建文档
2、查询文档
3、修改文档
4、局部修改文档
5、删除文档
三、高级查询
1、全量查询
2、条件查询
3、分页查询
4、多条件查询
为了操作方便,我直接使用了Windows下的ElasticSearch。需要注意的一点是,ElasticSearch8以上的版本是基于java17的。
我使用的是7.6.2的版本。下载好压缩包之后,解压,进入bin目录,双击elasticsearch.bat文件即可启动。
启动后访问 http://localhost:9200/ ,看看能否出现正常的页面:
如果能出现,说明已经正常启动了。
在ElasticSearch中创建索引 就等同于 在关系型数据库中创建数据库。
首先我们打开postman发送请求
http://127.0.0.1:9200/shopping
有回应说明创建成功了:
查看shopping索引,命令不变,只不过要把请求方式改为GET请求。
使用GET命令:
http://127.0.0.1:9200/_cat/indices?v
请求路径中的_cat 表示查看的意思,indices 表示索引,所以整体含义就是查看当前 ES 服务器中的所有索引,就好像 MySQL 中的 show tables 的感觉。
因为我们只创建了shopping这一个索引,所以只会显示一个索引。
对于其中表头的含义:
路径还是不变,请求改为DELETE,即可删除shopping索引。
再看看索引还在不在,查看全部索引
创建文档使用POST请求。为什么和创建索引不同呢?是因为创建文档每次会生成随机的id,每次的id都不一样,而PUT请求是幂等性的,所以不能用PUT请求。
http://127.0.0.1:9200/shopping/_doc/1001
将_doc换为_created也可以。
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
发送请求后的响应体:
而如果我们要使用这个id来查询的话,非常不方便。因此在创建的时候,我们可以为其自定义id。
http://127.0.0.1:9200/shopping/_doc/1001
而如果这样操作,每次的id就是一样的了,因此我们也可以使用PUT请求。
命令不变,改为GET请求即可。
命令和创建一样,请求类型为POST,将要改的地方在请求体中修改。
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":4000.00
}
再去查询一下,发现已经更改成功了。
一般来说,我们都不需要修改文档中所有的东西,所以我们可以只写要修改的部分。
因为这样的操作不是幂等性,所以只能用POST请求。
如果写为_doc有可能会被认为是新增,所以写为_update,明确表示这是修改操作。
http://127.0.0.1:9200/shopping/_update/1001
{
"doc":{
"price":3000.00
}
}
命令与创建文档相同,请求方式为DELETE
ElasticSearch最核心的操作还是查询。
GET请求
http://127.0.0.1:9200/shopping/_search
查询结果:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "pXrb6H8BMLN1rdkSJX2N",
"_score": 1.0,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999.00
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "1001",
"_score": 1.0,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3000.0
}
}
]
}
}
http://127.0.0.1:9200/shopping/_search?q=category:小米
q后跟条件
但是一般来说,还是把条件放在请求体中。
使用的命令与全量查询一样,请求体如下:
{
"query":{
"match":{
"category":"小米"
}
}
}
命令和全量查询一致,请求体如下:
{
"query":{
"match_all":{
}
},
"from":0,
"size":2
}
from表示从第几页开始,size表示一页显示几个数据。
命令与全量查询命令相同,请求体如下:
{
"query" : {
"bool" : {
"must" : [
{
"match" : {
"category":"小米"
}
},
{
"match" : {
"price":3999.00
}
}
]
}
}
}
将查找所有条件都符合的数据(相当于and)。
如果将must改为should,将查找满足一个或多个条件的数据(相当于or)。