当前位置: 首页 > article >正文

二十七、RestClient查询文档

目录

一、MatchALL查询

二、Match查询

三、bool查询

四、排序和分页

五、高亮


一、MatchALL查询

    @Test
    void testMatchAll() throws IOException {
//      准备Request对象
        SearchRequest request = new SearchRequest("hotel");
//      准备DSL
        request.source().query(QueryBuilders.matchAllQuery());
//      发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//      解析响应
        SearchHits searchHits = response.getHits();
//      获取总条数
        long value = searchHits.getTotalHits().value;
        System.out.println("共搜索到"+value+"条数据!");
//      获取文档数组
        SearchHit[] hits = searchHits.getHits();
//      遍历
        for (SearchHit hit : hits) {
//          获取文档source
            String json = hit.getSourceAsString();
//          反序列化
            HotelDoc object = JSON.parseObject(json, HotelDoc.class);
            System.out.println("object = " + object);
        }
    }

二、Match查询

    @Test
    void testMatch() throws IOException {
//      准备Request对象
        SearchRequest request = new SearchRequest("hotel");
//      准备DSL
        request.source().query(QueryBuilders.matchQuery("name","连锁"));
//      发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//      解析响应
        SearchHits searchHits = response.getHits();
//      获取总条数
        long value = searchHits.getTotalHits().value;
        System.out.println("共搜索到"+value+"条数据!");
//      获取文档数组
        SearchHit[] hits = searchHits.getHits();
//      遍历
        for (SearchHit hit : hits) {
//          获取文档source
            String json = hit.getSourceAsString();
//          反序列化
            HotelDoc object = JSON.parseObject(json, HotelDoc.class);
            System.out.println("object = " + object);
        }
    }

三、bool查询

    @Test
    void testBool() throws IOException {
//      准备Request对象
        SearchRequest request = new SearchRequest("hotel");
//      准备DSL
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        boolQuery.must(QueryBuilders.termQuery("city","杭州"));
        boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));
        request.source().query(boolQuery);
//      发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        extracted(response);
    }

四、排序和分页

    @Test
    void testMatchAll() throws IOException {
//      准备Request对象
        SearchRequest request = new SearchRequest("hotel");
//      准备DSL
        request.source().query(QueryBuilders.matchAllQuery());
//      分页
        request.source().from(0).size(5);
//      排序
        request.source().sort("price", SortOrder.ASC);
//      发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//      解析响应
        extracted(response);
    }

五、高亮

所有搜索DSL的构建,记住一个API    :   SearchRequest的source()方法。

高亮结果解析是参考JSON结果,逐层解析

     @Test
    void testHighLight() throws IOException {
//      准备Request对象
        SearchRequest request = new SearchRequest("hotel");
//      准备DSL
        request.source().query(QueryBuilders.matchQuery("name", "连锁"));
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
//      发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        extracted(response);
    }   


private void extracted(SearchResponse response) {
//      解析响应
        SearchHits searchHits = response.getHits();
//      获取总条数
        long value = searchHits.getTotalHits().value;
        System.out.println("共搜索到" + value + "条数据!");
//      获取文档数组
        SearchHit[] hits = searchHits.getHits();
//      遍历
        for (SearchHit hit : hits) {
//          获取文档source
            String json = hit.getSourceAsString();
//          反序列化
            HotelDoc object = JSON.parseObject(json, HotelDoc.class);
//          获取高亮结果
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            if (!CollectionUtils.isEmpty(highlightFields)){
//              根据字段名获取高亮结果
                HighlightField highlightField = highlightFields.get("name");
                if (highlightFields != null){
//                  获取高亮值
                    String name = highlightField.getFragments()[0].string();
//                  覆盖非高亮结果
                    object.setName(name);
                }
            }
            System.out.println("object = " + object);
        }
    }


http://www.kler.cn/a/146472.html

相关文章:

  • 跨链原子交换
  • 《微信小程序开发从入门到实战》学习三十二
  • Spring Boot + hutool 创建海报图片
  • Typescript和Javascript的区别是什么?一文带您了解Typescript排名飙升的原因!
  • Open3D库进行点云的DBSCAN密度聚类和可视化 c++ 代码
  • 【Java】使用IntelliJ IDEA搭建SSM(MyBatis-Plus)框架并连接MySQL数据库
  • 【开源】基于Vue和SpringBoot的木马文件检测系统
  • 在Linux中对Docker中的服务设置自启动
  • 一起学docker系列之八使用 Docker 安装配置 MySQL
  • 梨花声音教育,美食视频配音再次挑战味蕾
  • rdf-file:分布式环境下的文件处理
  • 131.类型题-计算数学序列的和,请编写函数fun,其功能是S=……【满分解题代码+详细分析】(数学序列的和类型题-C/C++JavaPython实现)
  • 小程序wx:if和hidden的区别?
  • 卸载软件最最最彻底的工具——Uninstall Tool
  • PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables
  • LLaMA 2:开源的预训练和微调语言模型推理引擎 | 开源日报 No.86
  • 【虚拟机】在VM中安装 CentOS 7
  • 如何使用内网穿透将Tomcat网页发布到公共互联网上【内网穿透】
  • 首批!创邻科技入选《图数据库金融应用场景优秀案例》
  • python之yaml技术(可用于写接口自动化的测试用例文件)