公司早就用到了es,只是这款不是自己负责的。就一直没有去了解。最近需求提前做完了。抽个时间做个demo(仅限查询业务)。其他如数据同步,更新均是走数据库,然后通过binlog同步到es。
esdemo是基于springboot+jestClient。ES安装的是2.4.4版本。SpringBoot版本2.0.2RELEASE。完整pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.es</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1:向es插入数据
之前在网上找到一个文件,直接http://localhost:9200/bank3/account/_bulk 插入数据如图
成功后打开head插件。验证数据存在
使用java 代码查询age=21的pojo 代码如下:
package com.es.demo.controller;
import com.es.demo.entity.Entity;
import com.es.demo.es.UserService;
import io.searchbox.core.SearchResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
@RestController
public class ElasticSearchDemoController {
@Autowired
UserService userService;
@PostMapping("/es/get")
public List<Entity> searchById(@RequestBody Entity entity) throws Exception {
SearchResult a= userService.search(entity);
List<SearchResult.Hit<Entity, Void>> hits=a.getHits(Entity.class);
List<Entity> entities = hits.stream().map(q -> q.source).collect(Collectors.toList());
for(Entity e:entities){
System.out.println(e.getAge());
}
return entities;
}
}
userServiceImpl代码:
package com.es.demo.es.impl;
import com.es.demo.entity.Entity;
import com.es.demo.es.UserService;
import io.searchbox.client.JestClient;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.text.ParseException;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JestClient jestClient;
@Override
public <T> SearchResult search(Entity orderListReq) throws IOException, ParseException {
QueryBuilder queryBuilder = build(orderListReq.getAge());
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(queryBuilder);
//分页参数.用pageIndex,pageSize计算
sourceBuilder.from(0);
sourceBuilder.size(1000);
Search search = new Search.Builder(sourceBuilder.toString())
//bank3:索引名
.addIndex("bank3").build();
SearchResult result = jestClient.execute(search);
return result;
}
//查询构造器
private QueryBuilder build(Integer id) throws ParseException {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.wildcardQuery("age", String.valueOf(id)));
// 范围查询demo
// queryBuilder.must(QueryBuilders.rangeQuery("id").from(1).to(10));
return queryBuilder;
}
}
配置文件
server.port=8080
spring.elasticsearch.jest.uris= http://127.0.0.1:9200
测试结果:
查询成功。