RestClient查询文档

文章目录

  • 1、RestClient查询文档----快速入门
  • 2、查询文档--match、term、range、bool
  • 3、查询文档-排序和分页
  • 4、高亮

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

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

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

3.查询条件弄好后,再发送请求即可client调用search方法
RestClient查询文档_第1张图片
RestClient查询文档_第2张图片
RestClient查询文档_第3张图片
4.最后,解析结果
RestClient查询文档_第4张图片
RestClient查询文档_第5张图片
RestClient查询文档_第6张图片

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

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

根据酒店名查询酒店信息

( 1 )、
RestClient查询文档_第7张图片

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

RestClient查询文档_第8张图片

( 2 )、
RestClient查询文档_第9张图片

( 3 )、

RestClient查询文档_第10张图片

( 4 )、

RestClient查询文档_第11张图片

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

RestClient查询文档_第12张图片
RestClient查询文档_第13张图片

4、高亮

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

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

RestClient查询文档_第14张图片

  /**
     * 高亮测试
     */
    @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里面的,所以我们需要对响应结果的解析进行修改

RestClient查询文档_第15张图片

/**
     * 辅助方法,解析响应结果
     *
     * @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);
        }
    }

RestClient查询文档_第16张图片
RestClient查询文档_第17张图片

你可能感兴趣的:(ElasticSearch,elasticsearch,java)