一、前言
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
在全文检索领域, Lucene可谓是独领风骚数十年。倒排索引构成全文检索的根基。
本篇不研究底层,只介绍用法
二、Elasticsearch7与Mysql的对比
Elasticsearch5 | MYSQL | 说明 |
---|---|---|
Index | databases | ES的索引对应MYSQL的是一个数据库 |
type | table | ES的类型对应MYSQL的表 |
Documents | Rows | ES的文档对应MYSQL的一条数据 |
Elasticsearch有点长,下文直接简称ES。
ES7这个版本在创建mapping的时候不能指定type了,对应映射改成如下:
Elasticsearch7.9 | MYSQL | 说明 |
---|---|---|
Index | table | ES的索引对应MYSQL的表 |
Documents | Rows | ES的文档对应MYSQL的一条数据 |
去掉type,每个索引相当与MYSQL这种关系型数据库的表,索引之下就是属性了,对应着表的字段。
虽然创建的时候没有指定type,但是查看索引信息的时候,发现她变成了_doc
(可能是为了和之前的版本兼容?),ES8版本就应该是删除了,看官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html#_schedule_for_removal_of_mapping_types
怎么安装配置ES就不说了之前文章有:ES系列文章
三、索引
就我的理解,ES7的索引就类似于传统关系数据库中的表了。索引 (index) 的复数词为 indices 或 indexes 。
索引常用的配置如下:
// 分片个数 |
四、Mappings
mappings 就我的理解就是相当于传统关系数据库的表字段设计。就是字段的映射关系。
常用类型有:
text 非结构化文本,默认会进行分词,支持模糊查询 |
Mappings常用的设置参数:
properties 定义属性 |
五、API
直接用5.6.*版本
写过一篇笔记,虽然和现在7.9.*
有点不同,我就不重复写了,笔记链接:
1、创建索引
索引有点区别,因为type没有了
PUT http://172.16.1.236:9200/topic |
“term_vector”:”with_positions_offsets” 这个属性是为了高亮能用fvh(fast-vector-highlighter
)显示类型
2、操作mapping
# 给索引添加 location 定位属性 |
mapping 字段无法修改类型
3、添加数据
# 指定ID:0ab92409ea7843c89983ada5f7bc2524 添加数据 |
4、更新数据
# 修改title为:“测试更新”,status为2 |
5、删除数据
# 删除指定ID:450b4fd5e65f4004a4a96149e50d9e8b |
6、查询数据
# 查询所有数据 |
7、节点信息查询
# 查询集群设置 |
六、Java API
关键一环代码调用,Java 代码有3个客户端可以使用:
- TransportClient
这个使用的是ES的transport.tcp.port
端口进行传输数据。在ES7.0.0
弃用,到8.0.0
将删除 - Java Low Level REST Client
Rest低级别客户端,使用的是ES的http.port
端口进行传输数据。 - Java High Level REST Client
Rest高级别客户端,使用的是ES的http.port
端口进行传输数据。
和上面Java Low Level REST Client
的区别就是,在其基础上封装了一层.
可以理解为;
Java Low Level REST Client
相当与面向过程
Java High Level REST Client
相当与面向对象
既然TransportClient即将删除,那就用 RestHighLevelClient 了
1、导入依赖
<dependency> |
2、配置RestHighLevelClient
RestHighLevelClient 就是高级别客户端。
import com.jfinal.kit.Prop; |
因为我没有使用Spring框架所有自己搞了个单例模式的Client,如果是Spring直接使用在方法上使用@Bean
注解即可,贼方便。
3、辅助工具类
贴完整点的代码吧
EsUtils 工具类
public class EsUtils { |
对象属性名称驼峰与下划线互转序列化类
fastjson 序列化类
/** |
这个序列化类主要是想把对象的属性名称驼峰与下划线互转。
如果你没有这个需求那可以不需要这个,直接存的就是属性名的字段。
4、抽象的增删改查类
主要写了一些平常可能用到的方法,还有很多查询没写,
/** |
这里写的不是那么全的查询,但是是常用的查询,还有很多查询,像前缀查询,聚合查询,多字段查询….等等
按需添加!!!
5、测试Demo
public class TopicService extends EsBaseService<Topic> { |
简单的测试一下保存功能!
官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.9/java-rest-high-search.html
熬夜多-记忆不好,又一篇笔记出炉!!!