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