bla*_*ith 4 java elasticsearch spring-data-elasticsearch
考虑以下Elasticsearch查询:
{
"query": {"match_all": {}},
"size": 0,
"aggs": {
"Terms": { "terms": { "field":"fileName" }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我只对聚合感兴趣,而不对文档感兴趣。这就是我设置size:0它并按预期运行的原因。但是,我无法通过实现相同的效果spring-data。代码示例:
PageRequest page = new PageRequest(0, 0);
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(indexName).withTypes(typeName)
.withQuery(queryBuilder).withAggregation(aggsBuilder)
.withPageable(pageable).build();
Run Code Online (Sandbox Code Playgroud)
PageRequest然后,此构造函数引发一个异常,该异常来自其父级:
public AbstractPageRequest(int page, int size) {
if (page < 0) {
throw new IllegalArgumentException("Page index must not be less than zero!");
}
if (size < 1) {
throw new IllegalArgumentException("Page size must not be less than one!");
}
this.page = page;
this.size = size;
}
Run Code Online (Sandbox Code Playgroud)
问题:spring数据中有什么方法可以将文档大小限制为零?
我们可以定义空的可分页接口实现类,如下所示:
public static class EmptyPage implements Pageable {
public static final EmptyPage INSTANCE = new EmptyPage();
@Override
public int getPageNumber() {
return 0;
}
@Override
public int getPageSize() {
return 0;
}
@Override
public int getOffset() {
return 0;
}
@Override
public Sort getSort() {
return null;
}
@Override
public Pageable next() {
return null;
}
@Override
public Pageable previousOrFirst() {
return null;
}
@Override
public Pageable first() {
return null;
}
@Override
public boolean hasPrevious() {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withIndices(indexName).withTypes(typeName)
.addAggregation(aggsBuilder)
.withPageable(EmptyPage.INSTANCE)
.build();
Run Code Online (Sandbox Code Playgroud)
结果:
{
"aggregations": { ... },
"from": 0,
"query": { ... },
"size": 0
}
Run Code Online (Sandbox Code Playgroud)
从 Spring Data Elasticsearch 4.0 开始,NativeSearchQuery有StringQuery一个CriteriaQuery方法setMaxResults(Integer maxResults)
所以查询是
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(indexName).withTypes(typeName)
.withQuery(queryBuilder).withAggregation(aggsBuilder)
.build();
searchQuery.setMaxResults(0);
Run Code Online (Sandbox Code Playgroud)
该setMaxResults()方法返回void,因此不能与构建器语法一起使用
这将添加"size":0到请求对象的顶部
| 归档时间: |
|
| 查看次数: |
3343 次 |
| 最近记录: |