20-RestClient查询文档-match查询、精确查询和布尔查询
因此,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 }
-
term:词条精确匹配
-
range:范围查询
与之前的查询相比,差异同样在查询条件,其它都一样。
查询条件构造的API如下:
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 }
希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt