基于Spring-Data-Elasticsearch三种查询的使用示例

1.CriteriaQuery
标准查询

1
2
3
4
5
6
Criteria criteria = new Criteria("id").is("1");
CriteriaQuery query = new CriteriaQuery(criteria);
query.addIndices("test");
query.addTypes("test");
query.setPageable(PageRequest.of(page, size))
List<TestObject> list = template.queryForList(criteria, TestObject.class);

2.SearchQuery
可以定义查询(query)和过滤(filter)
查询(query):用于检查内容与条件是否匹配,并且计算_score元字段表示匹配度,查询的结构中以query参数开始来执行内容查询
过滤(filter):不计算匹配得分,只是简单地决定文档是否匹配,内容过滤主要用于过滤结构化的数据

1
2
3
4
5
6
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(
QueryBuilders.matchQuery("id", "1"))
.withIndices("test")
.withTypes("test")
.build();
List<TestObject> list = template.queryForList(searchQuery, TestObject.class);

3.StringQuery
基于DSL定义的JSON的查询

1
2
3
4
5
6
7
	StringQuery stringQuery = new StringQuery(
"{\"query\":{\"bool\":{\"must\":[{\"term\":{\"id\":\"1\"}}],\"must_not\":[],
\"should\":[]}},\"from\":0,\"size\":10,\"sort\":[],\"aggs\":{}}");
searchQuery.addIndices("test");
searchQuery.addTypes("test");

List<TestObject> list = template.queryForList(stringQuery, TestObject.class);