1.简介
EBatis是一个声明式的ElasticSearch ORM框架。类似MyBatis,只需要定义接口,便可轻松访问ElasticSearch,优雅地帮助开发者隔离业务对ElasticSearch底层接口的调用,无需手动构建繁琐的DSL语句。同时,当升级ElastiSearch版本时,无需关心底层接口的变动,平滑升级。目前,支持ElasticSearch6.5.1与7.5.1版本(本教程演示版本)。
2.连接集群
(1).依赖
<parent>
<artifactId>ebatis</artifactId>
<groupId>io.manbang</groupId>
<version>7.5.1.10.RELEASE</version>
</parent>
<properties>
<spring-boot.version>1.5.12.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--elasticsearch-->
<dependency>
<groupId>io.manbang</groupId>
<artifactId>ebatis-spring</artifactId>
<version>7.5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service-annotations</artifactId>
<version>1.0-rc6</version>
<optional>true</optional>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>1.0-rc6</version>
<optional>true</optional>
<scope>compile</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>es</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
(2).代码
首先在项目目录“/src/main/java/com/example/es”下新建config目录,并在config目录下新建SampleClusterRouterProvider类,具体代码如下。
@AutoService(ClusterRouterProvider.class)
public class SampleClusterRouterProvider implements ClusterRouterProvider {
public static final String SAMPLE_CLUSTER_NAME = "sampleCluster";
@Override
public ClusterRouter getClusterRouter(String name) {
if (SAMPLE_CLUSTER_NAME.equalsIgnoreCase(name)) {
Cluster cluster = Cluster.simple("127.0.0.1", 9200, Credentials.basic("admin", "123456"));
ClusterRouter clusterRouter = ClusterRouter.single(cluster);
return clusterRouter;
} else {
return null;
}
}
}
然后再新建EsConfig类,具体代码如下。
@Configuration
@EnableEasyMapper(basePackages = "com.example.es.mapper")
public class EsConfig {
@Bean(destroyMethod = "close")
public ClusterRouter clusterRouter() {
return ClusterRouter.localhost();
}
}
(3).测试
启动项目,然后在控制台可以看到如下输出。
Started EsApplication in 2.001 seconds (JVM running for 3.112)
3.文档准备
打开kibana Dev Tools,分别添加索引和文档记录。
PUT /employee
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
PUT /employee/_mapping
{
"properties": {
"employeeId": {
"type": "integer"
},
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"birthday": {
"type": "date",
"format": "yyyy-MM-dd"
},
"job": {
"type": "keyword"
},
"salary": {
"type": "float"
}
}
}
POST /employee/_doc
{
"employeeId":10000001,
"name": "James Harden",
"job": "Java engineer",
"age": 31,
"salary": 30000.00,
"birthday": "1991-01-01"
}
{
"employeeId":10000002,
"name": "Stephen Curry",
"job": "Java engineer",
"age": 27,
"salary": 20000.00,
"birthday": "1995-08-06"
}
{
"employeeId":10000003,
"name": "LeBron James",
"job": "Technical director",
"age": 35,
"salary": 50000.00,
"birthday": "1987-12-25"
}
{
"employeeId":10000004,
"name": "Damian Lillard",
"job": "Vue engineer",
"age": 25,
"salary": 18000.00,
"birthday": "1996-10-01"
}
{
"employeeId":10000005,
"name": "Kevin Durant",
"job": "Vue engineer",
"age": 30,
"salary": 28000.00,
"birthday": "1992-05-01"
}
{
"employeeId":10000006,
"name": "Chirs Paul",
"job": "Java engineer",
"age": 33,
"salary": 29000.00,
"birthday": "1988-12-02"
}
{
"employeeId":10000007,
"name": "Jason Tatum",
"job": "Java engineer",
"age": 24,
"salary": 15000.00,
"birthday": "1997-08-02"
}