20-RestClient查询文档-match查询、精确查询和布尔查询

发布时间 2023-05-23 15:03:23作者: JustJavaIt

match查询

全文检索的match和multi_match查询与match_all的API基本一致。差别是查询条件,也就是query的部分。

 因此,Java代码上的差异主要是request.source().query()中的参数了。同样是利用QueryBuilders提供的方法:

而结果解析代码则完全一致,可以抽取并共享。

 完整代码

 1  @Test
 2     void testMatch() throws IOException {
 3         // 1.准备request
 4         SearchRequest request = new SearchRequest("hotel");
 5         // 2.准备请求参数
 6         //match_all查询
 7         request.source().query(QueryBuilders.matchAllQuery());
 8         //全文检索--match单字段查询
 9         //request.source().query(QueryBuilders.matchQuery("all", "外滩如家"));
10         //全文检索--multi_match多字段查询
11         //request.source().query(QueryBuilders.multiMatchQuery("外滩如家", "name", "brand", "city"));
12 
13         // 3.发送请求,得到响应
14         SearchResponse response = client.search(request, RequestOptions.DEFAULT);
15         // 4.结果解析
16         handleResponse(response);
17     }
View Code

 精确查询

精确查询主要是两者:

  • term:词条精确匹配

  • range:范围查询

与之前的查询相比,差异同样在查询条件,其它都一样。

查询条件构造的API如下:

 布尔查询

布尔查询是用must、must_not、filter等方式组合其它查询,代码示例如下:

可以看到,API与其它查询的差别同样是在查询条件的构建,QueryBuilders,结果解析等其他代码完全不变。

 1 /**
 2      * 精确查询和bool查询
 3      * @throws IOException
 4      */
 5     @Test
 6     void testBool() throws IOException {
 7         // 1.准备request
 8         SearchRequest request = new SearchRequest("hotel");
 9         // 2.准备请求参数
10        /*
11          BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
12         // 2.1.must
13         boolQuery.must(QueryBuilders.termQuery("city", "杭州"));
14         // 2.2.filter
15         boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));
16         */
17 
18         request.source().query(
19                 QueryBuilders.boolQuery()
20                         .must(QueryBuilders.termQuery("city", "杭州"))
21                         .filter(QueryBuilders.rangeQuery("price").lte(250))
22         );
23         // 3.发送请求,得到响应
24         SearchResponse response = client.search(request, RequestOptions.DEFAULT);
25         // 4.结果解析
26         handleResponse(response);
27     }
View Code