黑马JavaRestClient查询文档

1、查询

查询的基本步骤是:

1.创建SearchRequest对象

2.准备Request.source(),也就是DSL。

QueryBuilders来构建查询条件

传入Request.source()的 query()方法

3.发送请求,得到结果

4.解析结果(参考JSON结果,从外到内,逐层解析)
java和dsl对应关系 response和dsl查询结果对应关系

java 复制代码
@Test
 void testSearchMatchall() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
     request.source().query(QueryBuilders.matchAllQuery());
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    SearchHits hits = response.getHits();
    long value = hits.getTotalHits().value;
    System.out.println(value);
    SearchHit[] hits1 = hits.getHits();
    for (SearchHit hit : hits1) {
        String string = hit.getSourceAsString();
        //反序列化
        HotelDoc hotelDoc = JSON.parseObject(string, HotelDoc.class);
        System.out.println(hotelDoc);
    }
}

bool查询示例:

java 复制代码
@Test
    void testSearchBoolQuery() throws IOException {
        //准备request
        SearchRequest request = new SearchRequest("hotel");
        //准备boolQuery
        BoolQueryBuilder bool = QueryBuilders.boolQuery();
        //准备boolQuery中的条件
        bool.must(QueryBuilders.termQuery("city","杭州"));
        bool.filter(QueryBuilders.rangeQuery("price").lte(250));

        request.source().query(bool);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        extracted(response);
    }



private static void extracted(SearchResponse response) {
        SearchHits hits = response.getHits();
        long value = hits.getTotalHits().value;
        System.out.println(value);
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit hit : hits1) {
            String string = hit.getSourceAsString();
            //反序列化
            HotelDoc hotelDoc = JSON.parseObject(string, HotelDoc.class);
            System.out.println(hotelDoc);
        }
    }

要构建查询条件,只要记住一个类:QueryBuilders

2、排序和分页

java 复制代码
@Test
    void testSearchSort() throws IOException {
        //准备request
        SearchRequest request = new SearchRequest("hotel");
        //准备query,所有数据
        request.source().query(QueryBuilders.matchAllQuery());
        //设置分页,从0开始,5条数据
        request.source().from(0).size(5);
        //设置排序,升序
        request.source().sort("price", SortOrder.ASC);
        //发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //解析结果
        extracted(response);
    }

ps:一如dsl语句中一般,query字段和from、size、sort字段平级,因此都是在source()之后设置

3、高亮

java 复制代码
@Test
    void testSearchHightlight() throws IOException {
        //准备request
        SearchRequest request = new SearchRequest("hotel");
        //准备query,所有数据
        request.source().query(QueryBuilders.matchQuery("all","如家"));
        //准备hightlight字段
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
        //发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //解析结果
        highlightextracted(response);
    }



private static void highlightextracted(SearchResponse response) {
        SearchHits hits = response.getHits();
        long value = hits.getTotalHits().value;
        System.out.println(value);
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit hit : hits1) {
            String string = hit.getSourceAsString();
            //反序列化
            HotelDoc hotelDoc = JSON.parseObject(string, 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);
        }
    }

所有搜索DSL的构建,记住一个API:

SearchRequest的source()方法。

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

相关推荐
IT毕设梦工厂4 小时前
计算机毕业设计选题推荐:基于大数据的二手车数据可视化分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·数据挖掘·数据分析·课程设计·数据分析数据可视化
user_admin_god4 小时前
第 10 篇:拼上下文与生成——预算、边界与防幻觉
java·人工智能·spring boot·语言模型
用户3126874877204 小时前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java
IT毕设梦工厂4 小时前
计算机毕业设计选题推荐:基于大数据的购物趋势数据可视化分析系统|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·信息可视化·spark·毕业设计·课程设计·大数据毕设项目
Elasticsearch4 小时前
两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch
elasticsearch
IT毕设梦工厂5 小时前
计算机毕业设计选题推荐:基于大数据的城市尾气排放数据可视化分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·信息可视化·spark·毕业设计·课程设计·大数据毕设项目
天天被压力5 小时前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #02】涨停跌停与特色股池:5类股池接口一次拉全
java·人工智能·python
斯维赤5 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
jeffwang5 小时前
不装分词插件,用 PostgreSQL 做中文商品搜索:bigram + 向量 + RRF,以及「单字搜不到」这个坑
搜索引擎·postgresql·go
zhanghaha13145 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt