Spring Boot集成ElasticSearch(一)
简介
ElasticSearch是一款功能强大的开源分布式搜索与数据分析引擎。在同领域类几乎没有竞争对手。ElasticSearch还被广泛运用与大数据近实时分析、包括日志分析(ELK),指标监控,信息安全等多个领域。
Spring Data Elasticsearch
Spring Data Elasticsearch是Spring提供的一种以Spring Data风格来操作数据存储的方式,它可以避免编写大量的样板代码。本篇文章主要讲解如何用Spring Data Elasticsearch来操作Elasticsearch。
后面还会写一篇文章讲解下如何用Rest High Level Client来操作Elasticsearch 7.0以上版本。
倒排索引机制
在讲解Spring Data Elasticsearch之前,倒排索引有必要简单介绍下。
一般我们用Mysql的Like也可以实现文本的模糊匹配,但如果用Like,Mysql的索引基本上用不了(除非匹配到索引的最左前缀原则),只能全表扫描,而且还要做全文匹配的话,速度会更慢,性能上满足不了。
ES用倒排索引机制提高搜索性能。
例如我们有一张表:
需求描述
构建订单搜索,支持通过订单备注全文搜索,以及订单标签的精确搜索。
1、构建索引
curl -X PUT -H "Content-Type:application/json"
-d '{"mappings":{"order_test":{"properties":{"id":{"type":"long"},"userId":{"type":"long"},"referId":{"type":"long"},"status":{"type":"integer"},"note":{"type":"text"},"tags":{"type":"keyword"},"createTime":{"type":"date"}}}}}' 127.0.0.1:9200/test
2、 添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
application.yaml配置
Elasticsearch默认使用9300端口与java客户端进行交互,但7.x以上版本不在支持TCP,只能使用9200端口即http restful风格的方式来与Elasticsearch交互 。
Spring Data Elasticsearch使用的是tcp的方式,所以7.x以上的高版本,已无法使用Spring Data Elasticsearch操作Elasticsearch。本文用到的版本是6.5.3,支持Spring Data Elasticsearch(tcp方式)与Elasticsearch进行交互。
spring: data: elasticsearch: repositories: enabled: true cluster-nodes: 127.0.0.1:9300 cluster-name: elasticsearch
浙公网安备 33010602011771号