背景
最近业务上要做一个频繁查询通话次数的结果,但是通话记录表特别大,有几千万数据,在mysql上面,我们都知道mysql在这样大的数据下性能出现了问题,而且mysql面向的业务一般都是事务型的,为了解决这个问题,我们最终选择了elasticsearch,es是基于apache lucene 去实现的,lucene是一个流行开源的检索服务,性能在开源项目中算是数一数二的了,关于对apache lucene的分析以后会陆续出文章,感兴趣的小伙伴可以交流交流。
本项目是基于spring data 整合 elasticsearch,这个过程中遇到很多坑,在引入es的依赖的时候,会出现问题,最后发现是版本的问题,然后把springboot web 版本升级到最高就得以解决,注意下面项目依赖
ES 对于版本的兼容性要求很高。大版本之间是无法兼容的。具体可以见
- 项目结构
- 项目依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.0.M3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.0.M3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.0.0.RC2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.0.0.M3</version>
<scope>test</scope>
</dependency>
</dependencies>
- es 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/elasticsearch
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd">
<elasticsearch:transport-client id="client" cluster-nodes="${elasticsearch.cluster-nodes}" cluster-name="${elasticsearch.cluster-name}" />
<bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client" />
</bean >
<elasticsearch:repositories base-package="com.example.demo.repository.UserRepository"
elasticsearch-template-ref="elasticsearchTemplate" />
</beans>
- repository配置
public interface UserRepository extends ElasticsearchRepository<User,String> {
User findByName(String name);
}
完整项目github链接:
https://github.com/myyan/ElasticsearchDemo