springboot项目建立
建立一个常规的springboot项目,增加如下依赖与配置:
- pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- application.properties
spring.elasticsearch.rest.uris=*.0.0.0:9200
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=*.0.0.0:9300
spring.data.elasticsearch.repositories.enabled=true
其中,spring.elasticsearch.rest.uris配置项不需要加中括号!!!
集成Spring Data Elasticsearch
定义实体类
使用repository作为es的操作方式,首先根据数据结构,与es中index、type名称定义实体类:
@Data
@Document(indexName = "testindex",type = "estest")
public class esTest {
@Id
@Field(type = FieldType.Integer)
private Integer id;
@Field(type = FieldType.Integer)
private Integer num;
@Field(type = FieldType.text)
private String name;
@Field(type = FieldType.text)
private String number;
@Field(type = FieldType.Keyword)
private String content;
}
定义repository
@Repository
public interface TestRepository extends ElasticsearchRepository<esTest,Integer> {
}
ElasticsearchRepository已经实现了简单的增删改查方法,包括单条存储、多条存储、查询全部、删除等:
/*
添加单条数据
*/
esTest es = new esTest();
es.setId(1);
es.setContent("content1");
es.setNum(5);
es.setName("name1");
es.setNumber("number1");
testRepository.save(es);
/*
删除全部数据
*/
testRepository.deleteAll();
/*
查询全部数据
*/
Iterable<esTest> listResult = testRepository.findAll();
条件检索
使用NativeSearchQueryBuilder建立自定义的查询,需要分别定义其:
- 检索条件(Query)
- 分页(Pageable)
- 排序(Sort)
- 过滤(Filter)
List<esTest> list = query(content);
public List<esTest> query(String content){
//定义检索方式与内容
MatchQueryBuilder builder = QueryBuilders.matchQuery("content",content);
//定义排序
FieldSortBuilder sort = SortBuilders.fieldSort("num").order(SortOrder.DESC);
//NativeSearchQueryBuilder建立
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//定义检索
nativeSearchQueryBuilder.withQuery(builder);
//分页
nativeSearchQueryBuilder.withPageable(new PageRequest(0, 10));
//排序
nativeSearchQueryBuilder.withSort(sort);
SearchQuery query = nativeSearchQueryBuilder.build();
//得到分页后结果
Page<esTest> page = testRepository.search(query);
List<esTest> list = page.getContent();
return list;
}
- 部分检索条件对数据类型有要求,例如分词检索要求类型为TEXT
- QueryBuilders相关检索方式可参考:https://blog.csdn.net/yuhui123999/article/details/105202140