Elasticsearch分页查询、排序、多条件查询(java API)

柔情只为你懂 2023-06-25 04:55 104阅读 0赞

最近公司项目用到Elasticsearch,自己摸索了好几天才把这个弄明白,和大家分享一下:

一、建立Elasticsearch连接

  1. package com.wlsj.yshj.config;
  2. import org.apache.http.HttpHost;
  3. import org.apache.http.client.config.RequestConfig.Builder;
  4. import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
  5. import org.elasticsearch.client.RestClient;
  6. import org.elasticsearch.client.RestClientBuilder;
  7. import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback;
  8. import org.elasticsearch.client.RestHighLevelClient;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import javax.annotation.PostConstruct;
  12. import java.util.ArrayList;
  13. /**
  14. * Description: dp
  15. */
  16. @Configuration
  17. public class EsConfiguration {
  18. private static String hosts = "172.63.24.50"; // 集群地址,多个用,隔开
  19. private static int port = 9100; // 使用的端口号
  20. private static String schema = "http"; // 使用的协议
  21. private static ArrayList<HttpHost> hostList = null;
  22. private static int connectTimeOut = 1000; // 连接超时时间
  23. private static int socketTimeOut = 30000; // 连接超时时间
  24. private static int connectionRequestTimeOut = 500; // 获取连接的超时时间
  25. private static int maxConnectNum = 100; // 最大连接数
  26. private static int maxConnectPerRoute = 100; // 最大路由连接数
  27. static {
  28. hostList = new ArrayList<>();
  29. String[] hostStrs = hosts.split(",");
  30. for (String host : hostStrs) {
  31. hostList.add(new HttpHost(host, port, schema));
  32. }
  33. }
  34. @PostConstruct
  35. void init() {
  36. System.setProperty("es.set.netty.runtime.available.processors", "false");
  37. }
  38. @Bean
  39. public RestHighLevelClient client() {
  40. RestClientBuilder builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
  41. // 异步httpclient连接延时配置
  42. builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
  43. @Override
  44. public Builder customizeRequestConfig(Builder requestConfigBuilder) {
  45. requestConfigBuilder.setConnectTimeout(connectTimeOut);
  46. requestConfigBuilder.setSocketTimeout(socketTimeOut);
  47. requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
  48. return requestConfigBuilder;
  49. }
  50. });
  51. // 异步httpclient连接数配置
  52. builder.setHttpClientConfigCallback(new HttpClientConfigCallback() {
  53. @Override
  54. public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
  55. httpClientBuilder.setMaxConnTotal(maxConnectNum);
  56. httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
  57. return httpClientBuilder;
  58. }
  59. });
  60. RestHighLevelClient client = new RestHighLevelClient(builder);
  61. return client;
  62. }
  63. }

二、开始写查询和封装条件

20191226102935645.png

1、分页参数

20191226102212996.png

2、创建一个 SearchSourceBuilder、BoolQueryBuilder、QueryBuilder

  1. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  2. BoolQueryBuilder bq = QueryBuilders.boolQuery();
  3. QueryBuilder queryBuilder = bq.must(QueryBuilders.existsQuery("公司名称"));

是否存在

20191226102405690.png

在一个范围之内

min:最小数

max:最大数

gt : 大于 gte: 大于等于 lt: 小于 ,lte:小于等于

20191226102446592.png

20191226102633801.png

匹配用matchQuery()

2019122610283790.png

不包含mustNot()

20191226103024916.png

注意:在比较的时候 ES中的数据类型要匹配(date,float、int)切记、切记

2、查询数量

20191226103140147.png

3、排序

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JvYmVydDc4OTY1NA_size_16_color_FFFFFF_t_70

4、连接es查询列表

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JvYmVydDc4OTY1NA_size_16_color_FFFFFF_t_70 1

5、处理查询结果

20191226103539173.png

至此分页查询完结。需要注意的如下:

(1)、对matchQuery()、termQuery()、existsQuery()等的查询方法应用,要自己揣摩一下;

(2)、查询开始时 SearchSourceBuilder、BoolQueryBuilder、QueryBuilder这些对象的创建和顺序;

(3)、对查询结果的封装,这个相对java同学比较简单。

二、单条数据的查询:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JvYmVydDc4OTY1NA_size_16_color_FFFFFF_t_70 2

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读