ElasticSearch7.6.x
什么是ElasticSearch?
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
ES的基本概念
对比于现有的关系型数据库去学习
Relational DB | Elasticsearch |
---|---|
数据库(database) | 索引(indices) |
表(tables) | 类型(types) |
行(rows) | 文档(document) |
字段(columns) | 字段(fields) |
Restful风格:
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/indices/ types/document_ID | 创建文档(指定ID) |
POST | localhost:9200/indices/ types | 创建文档(随机ID) |
POST | localhost:9200/indices/ types/document_ID/_update | 修改文档 |
DELETE | localhost:9200/indices/ types/document_ID | 删除文档 |
GET | localhost:9200/indices/ types/document_ID | 通过ID查询文档 |
POST | localhost:9200/indices/ types/_search | 查询所有的文档 |
indices:n. 指数;目录(index的复数)
基础测试:
1 | PUT /test01/_doc/2 |
请求头+请求体
关于索引的操作
创建索引
1 | PUT /indices/types/document_ID |
数据类型:
Field | Type |
---|---|
字符串类型 | text 、 keyword |
数值类型 | long, integer, short, byte, double, float,half_float, scaled_float |
日期类型 | date |
布尔值类型 | boolean |
二进制类型 | binary |
指定字段的类型
1 | PUT /test01 |
可以通过 GET 请求获取具体的信息!
1 | GET indices |
get _cat/ 可以获得es的当前的很多信息
1 | GET _cat/indices?v |
更新数据
- put
1 | put /indices/types/document_ID |
- POST _update
1 | POST /indices/types/document_ID/_update |
put
的方法只是简单的覆盖而已,后面加_update
只会修改修改的数据。
删除索引
1 | DELETE /indices |
关于文档的基本操作
基本操作:
添加数据
1 | PUT /summer/user/1 |
修改内容
- put
1 | put /indices/types/document_ID |
- POST _update
1 | POST /indices/types/document_ID/_update |
简单地搜索!
1 | GET /summer/user/_search?q=name:summer |
条件:
1 | q=name:summer |
复杂操作搜索
查找
1 | GET /summer/user/_search |
查出来的结果:
我们发现我们的结果在hits
中,想要的信息在hits
中的hits
中
n. 击打;网页点击数;采样数(hit的复数)
限制只显示哪个字段
select name,age from user ;
1 | GET /summer/user/_search |
排序
select * from user ORDER BY age;
1 | GET /summer/user/_search |
分页 from size
select * from user limit from ,size ;
1 | GET /summer/user/_search |
布尔值查询
bool 就是SQL语句中的where
must:
select * from user where name = ‘summer’ and desc = ‘学java很开心’
1 | GET /summer/user/_search |
should:
select * from user where name = ‘summer’ or desc = ‘学java很开心’
1 | GET /summer/user/_search |
must_not
select * from user where not name = ‘summer’
1 | GET /summer/user/_search |
过滤器 filter
1 | GET /summer/user/_search |
匹配多个条件
1 | GET /summer/user/_search |
精确查询
关于分词:
term :直接查询精确的
match:会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!)
1 | GET /summer/user/_search |
高亮查询
1 | GET /summer/user/_search |
集成springboot
原生依赖导入
1 | <dependency> |
注:如果在创建springboot时直接选择了elasticsearch,就需要去springboot中去修改版本,因为springboot中默认的是6.X
1 | <properties> |
自定义一下版本。
将elasticsearch核心类配置进入springboot中
1 |
|
测试
1 | package com.summer; |
总结java对ElasticSearch进行操作
- 请求头
- 请求体
- 请求体的具体操作
- 执行请求体
报错:发现索引必须都是小写
1 | [summer_001Spring] ElasticsearchStatusException[Elasticsearch exception [type=invalid_index_name_exception, reason=Invalid index name [summer_001Spring], must be lowercase] |
坑点: 这里必须要new IndexRequest
,不然值会重复
1 | users.forEach(System.out::println); |