之前写的那边那篇SpringBoot集成ES,现在已经不推荐使用的。
建议使用RestHighLevelClient也是官网推荐的。
简单操作使用ElasticsearchRestTemplate就好了,它只是Spring对RestHighLevelClient进行了封装
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
yml:
spring:
elasticsearch:
rest:
uris: http://192.168.1.235:9200
username: admin
password: admin
实体:
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Data
@Document(indexName = "test_user", shards = 3, replicas = 2)
public class TestUser {
@Id
@Field(type = FieldType.Keyword)
private String id;
@Field(type = FieldType.Keyword)
private String name;
@Field(type = FieldType.Integer)
private Integer age;
@Field(type = FieldType.Keyword)
private String sex;
@Field(type = FieldType.Keyword)
private String phone;
}
实现简单的操作:
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
@RestController
public class TestUserController {
@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;
/**
* 保存覆盖数据
*
* @return
*/
@GetMapping("/save")
public Object save() {
TestUser testUser = new TestUser();
testUser.setId("1");
testUser.setName("张三");
testUser.setAge(18);
testUser.setSex("男");
testUser.setPhone("15812341234");
//indexName默认取@Document中的indexName
elasticsearchRestTemplate.save(testUser);
//indexName动态指定--索引如果不存在save会自动创建后在存入数据
elasticsearchRestTemplate.save(testUser, IndexCoordinates.of("test_user_info"));
elasticsearchRestTemplate.save(testUser, IndexCoordinates.of("test_user_info_dd"));
return "ok";
}
/**
* 查询
*
* @return
*/
@GetMapping("/search")
public Object search() {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(queryBuilder);
NativeSearchQuery build = builder.build();
SearchHits<TestUser> test_user = elasticsearchRestTemplate.search(build, TestUser.class);
//indexName动态指定
SearchHits<TestUser> test_user_info = elasticsearchRestTemplate.search(build, TestUser.class, IndexCoordinates.of("test_user_info"));
HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("test_user", test_user.getSearchHits());
objectObjectHashMap.put("test_user_info", test_user_info.getSearchHits());
return objectObjectHashMap;
}
/**
* 删除
*
* @return
*/
@GetMapping("/delete")
public Object delete() {
//根据ID删除-indexName默认取@Document中的indexName
elasticsearchRestTemplate.delete("1", TestUser.class);
//根据ID删除-indexName动态指定
elasticsearchRestTemplate.delete("1", IndexCoordinates.of("test_user_info"));
//自定义条件、自定义索引
// BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
// queryBuilder.filter(QueryBuilders.matchQuery("name", "张三"));
// NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
// builder.withQuery(queryBuilder);
// NativeSearchQuery build = builder.build();
// elasticsearchRestTemplate.delete(build, TestUser.class, IndexCoordinates.of("test_user_info"));
return "ok";
}
}