RestClient查询文档

1、RestClient查询文档----快速入门

基本步骤
1.先创建SearchRequest对象,调用source方法(DSL)——>相当于红框内的大json

2.调用query方法,里面构成查询条件——>QueryBuilders来构建查询条件(比如下面的matchAllQuery())

3.查询条件弄好后,再发送请求即可client调用search方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.最后,解析结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、查询文档–match、term、range、bool

全文检索的matchQuery和multiMatchQuery其实与matchAll的API基本一致,差别是查询的条件,也就是query那部分不一致;

根据酒店名查询酒店信息

( 1 )、
在这里插入图片描述

核心:条件的改变全部都是由QueryBuilders决定的,改变它调用的api即可

在这里插入图片描述

( 2 )、
在这里插入图片描述

( 3 )、

在这里插入图片描述

( 4 )、

在这里插入图片描述

3、查询文档-排序和分页

在这里插入图片描述
在这里插入图片描述

4、高亮

注意:高亮的话,肯定是对关键字高亮,那么查询文档不能用query:match_all,我们可以用matchQuery();

1.首先,先得到高亮文档,source就相当于整个大的json数据,然后从外往里即可

在这里插入图片描述

  /**
     * 高亮测试
     */
    @Test
    void testHighlight() throws IOException {
        SearchRequest request = new SearchRequest("hotel");
        //准备query
        request.source().query(QueryBuilders.matchQuery("name","如家"));
        //准备字段高亮
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
 
        //发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
 
        //解析响应
        extracted(response);
    }

2.我们获取到高亮文档之后,因为高亮字段是不再_source里面的,所以我们需要对响应结果的解析进行修改

在这里插入图片描述

/**
     * 辅助方法,解析响应结果
     *
     * @param response:响应结果
     */
    private void extracted(SearchResponse response) {
        /**
         * 第二部分:响应结果的解析
         */
        SearchHits searchHits = response.getHits();
        //4.1得到总条数
        long total = searchHits.getTotalHits().value;
        System.out.println("共获取到" + total + "条数据");
 
        //4.2文档数组
        SearchHit[] hits = searchHits.getHits();
 
        //4.3遍历
        for (SearchHit hit : hits) {
            //获取文档source
            String json = hit.getSourceAsString();
 
            //将文档source利用fackjson进行反序列化得到HotelDoc对象
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
 
            /**
             * 在打印结果之前我们从文档取出字段的高亮结果
             */
            /*取出高亮结果*/
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            if(!CollectionUtils.isEmpty(highlightFields)){
                /*根据高亮字段名获取高亮结果*/
                HighlightField highlightField = highlightFields.get("name");
                if(highlightField!=null){
                    /*取出高亮值并且覆盖非高亮文档*/
                    String name = highlightField.getFragments()[0].string();
                    hotelDoc.setName(name);
                }
            }
            System.out.println(hotelDoc);
        }
    }

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值