分页

  1. @Test
  2. public void testSearchAllPage() throws IOException {
  3. // 搜索请求对象
  4. SearchRequest searchRequest = new SearchRequest("elasticsearch_test");
  5. // 搜索源构建对象
  6. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  7. // 设置搜索方法
  8. searchSourceBuilder.query(QueryBuilders.matchAllQuery());
  9. searchSourceBuilder.fetchSource(new String[]{"name", "price", "timestamp"}, new String[]{});
  10. // 设置分页参数
  11. int page = 2;
  12. int size = 2;
  13. // 计算出 from
  14. int form = (page - 1) * size;
  15. searchSourceBuilder.from(form);
  16. searchSourceBuilder.size(size);
  17. // 设置price 降序
  18. searchSourceBuilder.sort("price", SortOrder.DESC);
  19. // 请求对象设置 搜索源对象
  20. searchRequest.source(searchSourceBuilder);
  21. // 使用client 执行搜索
  22. SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
  23. // 搜索结果
  24. SearchHits hits = searchResponse.getHits();
  25. // 匹配到的总记录数
  26. TotalHits totalHits = hits.getTotalHits();
  27. System.out.println("查询到的总记录数:" + totalHits.value);
  28. // 得到的匹配度高的文档
  29. SearchHit[] searchHits = hits.getHits();
  30. for (SearchHit hit : searchHits) {
  31. String id = hit.getId();
  32. // 源文档的内容
  33. Map<String, Object> sourceMap = hit.getSourceAsMap();
  34. String name = (String) sourceMap.get("name");
  35. String timestamp = (String) sourceMap.get("timestamp");
  36. String description = (String) sourceMap.get("description");
  37. Double price = (Double) sourceMap.get("price");
  38. System.out.println(name);
  39. System.out.println(timestamp);
  40. System.out.println(description);
  41. System.out.println(price);
  42. }
  43. }

排序

query方法之后我们可以添加sort的参数来根据查询结果中某一列的数据进行排序。

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "match": {
  7. "area": "华中地区"
  8. }
  9. }
  10. ]
  11. }
  12. },
  13. "sort": [
  14. {
  15. "gdp": {
  16. "order": "asc"
  17. }
  18. }
  19. ]
  20. }

java代码

  1. public static void baseSortQuery() throws IOException {
  2. TermQueryBuilder query = QueryBuilders.termQuery("area", "华中地区");
  3. BoolQueryBuilder must = QueryBuilders.boolQuery().must(query);
  4. SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
  5. sourceBuilder.query(must).sort("gdp",SortOrder.DESC);
  6. SearchRequest request = new SearchRequest(INDEX);
  7. request.source(sourceBuilder);
  8. SearchResponse search =
  9. getClient().search(request, RequestOptions.DEFAULT);
  10. if (search.getShardFailures().length == 0) {
  11. System.out.println("do something");
  12. }
  13. }