RestClient查询


快速入门

我们通过match_all查询所有的文档内容来演示下基本的API,先看请求的DSL的组织

 @Test
    void testMatchAll() throws Exception{
        //1.准备Request
        SearchRequest searchRequest = new SearchRequest("hotel");
        //2.组织DSL参数
        searchRequest.source().query(QueryBuilders.matchAllQuery());
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(search);

    }

GET /hotel/_search
{
  "query":{
    "match_all": {}
  }
}

searchRequest.source()用来做为dsl的query字段,QueryBuilders用来调用各种查询条件

全文检索查询

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

// 单字段查询
QueryBuilders.matchQuery("all","如家");
//多字段查询
QueryBuilders.multiMatchQuery("如家","name","business");

小tips:ctrl+alt+m 抽取公共方法

//复合查询-Boolean query 
//精确查询常见的有term查询和range查询,同样利用QueryBuilders实现:
//创建布尔查询
SearchRequest searchRequest = new SearchRequest("hotel");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("city","北京"));
boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").lte(500));
//2.组织DSL参数
searchRequest.source().query(boolQueryBuilder);

排序和分页

搜索结果的排序和分页是与query同级的参数,对应的API如下

 	@Test
    void testSort() throws Exception {
        //1.准备Request
        SearchRequest searchRequest = new SearchRequest("hotel");
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.must(QueryBuilders.termQuery("city","北京"));
        boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(1000));
        //2.组织DSL参数
        searchRequest.source().query(boolQueryBuilder).sort("price",SortOrder.DESC).from(0).size(5);
        handleResponse(searchRequest);
    }

高亮

高亮API包括请求DSL构建和结果解析两部分。我们先看请求的DSL构建

//2.组织DSL参数
        searchRequest.source().query(boolQueryBuilder).sort("price",SortOrder.DESC).from(0).size(5).highlighter(
                new HighlightBuilder().field("name").requireFieldMatch(false)
RestClient在不同的场景下有不同的含义和应用。 ### ElasticSearch中的RestClient 在操作ElasticSearch时,Java程序员可通过官方的RestClient程序使用Java代码调用相关操作。初始化代码示例如下: ```java RestHighLevelClient client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://192.168.150.101:9200") //docker部署es的服务器的地址 )); ``` 其功能包括对ElasticSearch的索引库和文档进行增删改查等操作。例如在进行复合查询时: ```java // 创建 布尔查询 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); // 添加 term boolQuery.must(QueryBuilders.termQuery("city","上海")); // 添加 range boolQuery.filter(QueryBuilders.rangeQuery("price").lte(200)); request.source().query(boolQuery); ``` 排序查询和分页查询: ```java /*排序查询*/ request.source().sort("price", SortOrder.ASC); /*分页查询*/ request.source().from(0).size(5); ``` 高亮显示: ```java /*高亮显示 【highlight】 name是高亮的字段,"require_field_match": "false"字段是否必须与查询字段一致才高亮,默认为true*/ request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false)); ``` 要使用ElasticSearchRestClient,可通过Maven或Gradle等依赖管理工具添加相关依赖来下载,例如在Maven中添加如下依赖: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>你的版本号</version> </dependency> ``` 其中版本号需根据实际使用的ElasticSearch版本进行选择 [^1][^4][^5]。 ### Spring生态系统中的RestClient 在Spring生态系统里,RestClient是HTTP客户端演进的产物。Spring Boot 3.4版本在HTTP客户端支持方面带来重大更新,RestClient的出现提供了更多选择,还简化了配置过程,为开发者带来更好的开发体验 [^2]。 ### Kubernetes中的RESTClient Kubernetes中的RESTClient struct将一些常规资源与其进行绑定,其结构体定义如下: ```go type RESTClient struct { //base 提供了一个最基础的客户端的URL,它通常是从我们传入的配置文件中获取,指向配置文件所在的集群。 base *url.URL //versionedAPIPath 指的则是我们的APIPrefix GroupVersion, exp : apis/apps/v1 versionedAPIPath string //content 则是提供了客户端内容的配置,其中包含解码和编码器,用于为传输的数据进行解码和编码 content ClientContentConfig //createBackoffMgr 提供了一个用于创建BackoffManager的方法 createBackoffMgr func() BackoffManager //rateLimiter 则是提供了一个限速器 rateLimiter flowcontrol.RateLimiter warningHandler WarningHandler //http客户端 Client *http.Client } ``` 这里的base从传入的配置文件获取最基础客户端的URL,指向配置文件所在的集群;versionedAPIPath指APIPrefix GroupVersion;content提供客户端内容配置,包含解码和编码器;createBackoffMgr提供创建BackoffManager的方法;rateLimiter提供限速器;warningHandler处理警告;Client为http客户端 [^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值