分页
@Test
public void testSearchAllPage() throws IOException {
// 搜索请求对象
SearchRequest searchRequest = new SearchRequest("elasticsearch_test");
// 搜索源构建对象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 设置搜索方法
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.fetchSource(new String[]{"name", "price", "timestamp"}, new String[]{});
// 设置分页参数
int page = 2;
int size = 2;
// 计算出 from
int form = (page - 1) * size;
searchSourceBuilder.from(form);
searchSourceBuilder.size(size);
// 设置price 降序
searchSourceBuilder.sort("price", SortOrder.DESC);
// 请求对象设置 搜索源对象
searchRequest.source(searchSourceBuilder);
// 使用client 执行搜索
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 搜索结果
SearchHits hits = searchResponse.getHits();
// 匹配到的总记录数
TotalHits totalHits = hits.getTotalHits();
System.out.println("查询到的总记录数:" + totalHits.value);
// 得到的匹配度高的文档
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
String id = hit.getId();
// 源文档的内容
Map<String, Object> sourceMap = hit.getSourceAsMap();
String name = (String) sourceMap.get("name");
String timestamp = (String) sourceMap.get("timestamp");
String description = (String) sourceMap.get("description");
Double price = (Double) sourceMap.get("price");
System.out.println(name);
System.out.println(timestamp);
System.out.println(description);
System.out.println(price);
}
}
排序
query方法之后我们可以添加sort的参数来根据查询结果中某一列的数据进行排序。
{
"query": {
"bool": {
"must": [
{
"match": {
"area": "华中地区"
}
}
]
}
},
"sort": [
{
"gdp": {
"order": "asc"
}
}
]
}
java代码
public static void baseSortQuery() throws IOException {
TermQueryBuilder query = QueryBuilders.termQuery("area", "华中地区");
BoolQueryBuilder must = QueryBuilders.boolQuery().must(query);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(must).sort("gdp",SortOrder.DESC);
SearchRequest request = new SearchRequest(INDEX);
request.source(sourceBuilder);
SearchResponse search =
getClient().search(request, RequestOptions.DEFAULT);
if (search.getShardFailures().length == 0) {
System.out.println("do something");
}
}