ElasticSearch学习笔记-第三章 JavaAPI示例(7.8.0)

三、JAVA API示例(7.8.0)

3.1 环境搭建

3.1.1 引入Maven依赖
<dependencies>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!-- elasticsearch 的客户端 -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!-- elasticsearch 依赖 2.x 的 log4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>
        <!-- junit 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
3.1.2 创建ES客户端对象
import org.elasticsearch.client.RestHighLevelClient;
// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
    RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
// xxxx
// 关闭客户端对象
client.close();

这里使用的是高级 REST 客户端对象

3.1.3 学习注意

在学习Java API时,一定不能死记硬背,需要结合前面学习的http指令来学习。ElasticSearch的客户端Java API主要是用于帮助用户通过Java代码构建http请求指令,因此学会前面的http指令才是最为重要的。

对于Java API的使用,各位同学在使用之前,最好先写出需要构建的http指令,然后再尝试通过API去构建自己的指令。

3.2 索引

3.2.1 创建索引
/**
 * 创建索引
 *
 * @param client ES客户端对象
 */
private static void createIndex(RestHighLevelClient client) throws IOException {
    // 创建索引 - 请求对象
    CreateIndexRequest request = new CreateIndexRequest(INDEX_NAME);
    // 发送请求,获取响应
    CreateIndexResponse response = client.indices().create(request,
                                                           RequestOptions.DEFAULT);
    // 响应状态
    boolean acknowledged = response.isAcknowledged();
}
3.2.2 查看索引
/**
 * 查询索引
 *
 * @param client ES客户端对象
 */
private static void searchIndex(RestHighLevelClient client) throws IOException {
    // 查询索引 - 请求对象
    GetIndexRequest request = new GetIndexRequest(INDEX_NAME);
    // 发送请求,获取响应
    GetIndexResponse response = client.indices().get(request,
                                                     RequestOptions.DEFAULT);
    System.out.println("aliases:" + response.getAliases());
    System.out.println("mappings:" + response.getMappings());
    System.out.println("settings:" + response.getSettings());
}

结果如下图:

在这里插入图片描述

3.2.3 删除索引
/**
 * 删除索引
 *
 * @param client ES客户端对象
 */
private static void deleteIndex(RestHighLevelClient client) throws IOException {
    // 创建索引 - 请求对象
    DeleteIndexRequest request = new DeleteIndexRequest(INDEX_NAME);
    // 发送请求,获取响应
    AcknowledgedResponse response = client.indices().delete(request,
                                                            RequestOptions.DEFAULT);
    // 响应状态
    boolean acknowledged = response.isAcknowledged();
}

3.3 文档

创建一个User数据结构,结构如下

public class User {

    private String name;
    private String sex;
    private Integer age;
    private String tel;
	
    // 省略getter/setter
}
3.3.1 创建文档
/**
 * 添加文档
 *
 * @param client ES客户端对象
 */
private static void addDocument(RestHighLevelClient client) throws IOException {

    User user = new User();
    user.setName("张三");
    user.setAge(22);
    user.setSex("男");
    user.setTel("13111111111");

    // 新增文档 - 请求对象
    IndexRequest request = new IndexRequest();
    request.index(INDEX_NAME).id("1");

    // 将对象转换为json字符串
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(user);

    // 添加文档数据,数据格式为 JSON 格式
    request.source(json, XContentType.JSON);

    // 客户端发送请求,获取响应对象
    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    // 打印结果信息
    System.out.println("_index:" + response.getIndex());
    System.out.println("_id:" + response.getId());
    System.out.println("_result:" + response.getResult());
}

结果如下图:

在这里插入图片描述

3.3.2 查看文档
/**
 * 查询文档
 *
 * @param client ES客户端对象
 */
private static void searchDocument(RestHighLevelClient client) throws IOException {
    // 创建请求对象
    GetRequest request = new GetRequest().index(INDEX_NAME).id("1");
    // 客户端发送请求,获取响应对象
    GetResponse response = client.get(request, RequestOptions.DEFAULT);
    // 打印结果信息
    System.out.println("_index:" + response.getIndex());
    System.out.println("_type:" + response.getType());
    System.out.println("_id:" + response.getId());
    System.out.println("source:" + response.getSourceAsString());
}

结果如下图:

在这里插入图片描述

3.3.3 修改文档

全量修改

/**
 * 修改文档-全量
 *
 * @param client ES客户端对象
 */
private static void updateDocument(RestHighLevelClient client) throws IOException {

    User user = new User();
    user.setName("李四");
    user.setAge(30);
    user.setSex("女");
    user.setTel("13111111113");

    // 将对象转换为Map
    Map<String, Object> map = JSON.parseObject(JSON.toJSONString(user), new TypeReference<Map<String, Object>>() {
    });

    // 修改文档 - 请求对象
    UpdateRequest request = new UpdateRequest();
    // 配置修改参数
    request.index(INDEX_NAME).id("1");

    // 设置请求体,对数据进行修改
    request.doc(map, XContentType.JSON);
    // 客户端发送请求,获取响应对象
    UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
    System.out.println("_index:" + response.getIndex());
    System.out.println("_id:" + response.getId());
    System.out.println("_result:" + response.getResult());

    System.out.println("-----查询------");
    // 查询
    searchDocument(client);
   	
}

结果如下图:

在这里插入图片描述

局部修改

/**
 * 修改文档-局部
 *
 * @param client ES客户端对象
 */
private static void updateDocument2(RestHighLevelClient client) throws IOException {
    // 修改文档 - 请求对象
    UpdateRequest request = new UpdateRequest();
    // 配置修改参数
    request.index(INDEX_NAME).id("1");
    // 设置请求体,对数据进行修改
    request.doc(XContentType.JSON, "sex", "男");
    // 客户端发送请求,获取响应对象
    UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
    System.out.println("_index:" + response.getIndex());
    System.out.println("_id:" + response.getId());
    System.out.println("_result:" + response.getResult());

    System.out.println("-----查询------");
    // 查询
    searchDocument(client);
}

结果如下图:

在这里插入图片描述

3.3.4 删除文档
/**
 * 删除文档
 *
 * @param client ES客户端对象
 */
private static void deleteDocument(RestHighLevelClient client) throws IOException {
     // 创建请求对象
    DeleteRequest request = new DeleteRequest().index(INDEX_NAME).id("1");
    // 客户端发送请求,获取响应对象
    DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
    // 打印结果信息
    System.out.println("_index:" + response.getIndex());
    System.out.println("_id:" + response.getId());
    System.out.println("_result:" + response.getResult());

    System.out.println("-----查询------");
    // 查询
    searchDocument(client);
}

结果如下图:

在这里插入图片描述

3.3.5 批量新增文档
/**
 * 添加文档-批量
 *
 * @param client ES客户端对象
 */
private static void addDocumentBatch(RestHighLevelClient client) throws IOException {
    //创建批量新增请求对象
    BulkRequest request = new BulkRequest();

    for (int i = 1; i < 11; i++) {
        User user = new User();
        user.setName("用户" + i);
        user.setAge(20 + i);
        user.setTel("13111111111");
        user.setSex(i % 2 == 0 ? "男" : "女");
        IndexRequest indexRequest = new IndexRequest();
        indexRequest.index(INDEX_NAME).id(i + "");
        // 将对象转换为json字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
        indexRequest.source(json, XContentType.JSON);
        request.add(indexRequest);
    }
	
    // 批量新增
    BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
}
3.3.6 批量删除文档
/**
 * 删除文档-批量
 *
 * @param client ES客户端对象
 */
private static void deleteDocumentBatch(RestHighLevelClient client) throws IOException {
    // 创建批量删除请求对象
    BulkRequest request = new BulkRequest();
    request.add(new DeleteRequest().index(INDEX_NAME).id("1"));
    request.add(new DeleteRequest().index(INDEX_NAME).id("2"));
    request.add(new DeleteRequest().index(INDEX_NAME).id("3"));
    // 客户端发送请求,获取响应对象
    BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
}

3.4 高级查询

查询结果打印

/**
 * 查询结果打印
 *
 * @param response 查询结果
 * @param title    操作标题
 */
private static void printResultForSearchHighLevel(SearchResponse response, String title) {
    // 获取响应体中的hits字段的值(匹配的结果)
    SearchHits hits = response.getHits();
    System.out.println(title);
    // 总耗时(ms)
    System.out.println("took:" + response.getTook());
    // 是否超时
    System.out.println("timeout:" + response.isTimedOut());
    // 结果总数
    System.out.println("total:" + hits.getTotalHits());
    // 最大得分
    System.out.println("MaxScore:" + hits.getMaxScore());
    System.out.println("hits:【");
    for (SearchHit hit : hits) {
        // 输出每条查询的结果信息
        System.out.println(hit.getSourceAsString());
        if (!hit.getHighlightFields().isEmpty()) {
            System.out.println(hit.getHighlightFields());
        }
    }
    System.out.println("】");
}
3.4.1 查询所有文档
/**
 * 高级查询-查询所有文档
 *
 * @param client ES客户端对象
 */
private static void matchAll(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 查询所有数据
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "全量查询结果如下:");
}

结果如下

在这里插入图片描述

3.4.2 匹配查询
/**
 * 高级查询-匹配查询
 *
 * @param client ES客户端对象
 */
private static void match(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 构造查询条件
    sourceBuilder.query(QueryBuilders.matchQuery("name", "用户"));
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "匹配查询结果如下:");
}

查询name字段包含“用户”的数据

结果如下

在这里插入图片描述

3.4.3 多字段匹配查询
/**
 * 高级查询-多字段匹配查询
 *
 * @param client ES客户端对象
 */
private static void multiMatch(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 构造查询条件
    sourceBuilder.query(QueryBuilders.multiMatchQuery("女", "name","sex"));
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "多字段匹配查询结果如下:");
}

查询字段name或sex中包含“女”的数据

结果如下

在这里插入图片描述

3.4.4 关键字精确查询
/**
 * 高级查询-精确匹配查询
 *
 * @param client ES客户端对象
 */
private static void term(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 构造查询条件
    sourceBuilder.query(QueryBuilders.termQuery("age",23));
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "精确匹配查询结果如下:");
}

查询age字段为23的数据

结果如下图所示

在这里插入图片描述

3.4.5 多关键字精确匹配
/**
 * 高级查询-多关键字精确匹配查询
 *
 * @param client ES客户端对象
 */
private static void terms(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 构造查询条件
    List<Integer> ages = new ArrayList<>();
    ages.add(22);
    ages.add(23);
    sourceBuilder.query(QueryBuilders.termsQuery("age",ages));
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "多关键字精确匹配查询结果如下:");
}

查询age为22或者23的数据

结果如下

在这里插入图片描述

3.4.6 组合查询
  • must示例

    /**
     * 高级查询-组合查询-must
     *
     * @param client ES客户端对象
     */
    private static void mustQuery(RestHighLevelClient client) throws IOException {
        // 创建搜索请求对象
        SearchRequest request = new SearchRequest().indices(INDEX_NAME);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // 构造查询条件
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.must(QueryBuilders.matchQuery("name","用户"));
        boolQueryBuilder.must(QueryBuilders.termQuery("age",23));
        sourceBuilder.query(boolQueryBuilder);
        request.source(sourceBuilder);
        // 响应信息
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        // 输出结果
        printResultForSearchHighLevel(response, "组合查询-must查询结果如下:");
    }
    

    查询name字段包含“用户”且age字段值为23的数据

    结果如下

在这里插入图片描述

  • must_not示例

    /**
     * 高级查询-组合查询-must_not
     *
     * @param client ES客户端对象
     */
    private static void mustNotQuery(RestHighLevelClient client) throws IOException {
        // 创建搜索请求对象
        SearchRequest request = new SearchRequest().indices(INDEX_NAME);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // 构造查询条件
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex","男"));
        boolQueryBuilder.mustNot(QueryBuilders.termQuery("age",21));
        sourceBuilder.query(boolQueryBuilder);
        request.source(sourceBuilder);
        // 响应信息
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        // 输出结果
        printResultForSearchHighLevel(response, "组合查询-must_not查询结果如下:");
    }
    

    排除sex字段包含“男”以及age字段为21的数据

    结果如下

在这里插入图片描述

  • should示例

    /**
     * 高级查询-组合查询-should
     *
     * @param client ES客户端对象
     */
    private static void shouldQuery(RestHighLevelClient client) throws IOException {
        // 创建搜索请求对象
        SearchRequest request = new SearchRequest().indices(INDEX_NAME);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // 构造查询条件
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.should(QueryBuilders.matchQuery("sex","男"));
        boolQueryBuilder.should(QueryBuilders.termQuery("age",23));
        sourceBuilder.query(boolQueryBuilder);
        request.source(sourceBuilder);
        // 响应信息
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        // 输出结果
        printResultForSearchHighLevel(response, "组合查询-should查询结果如下:");
    }
    

    查询age字段是23或者sex字段包含“男”的数据

    结果如下

在这里插入图片描述

3.4.7 范围查询
/**
 * 高级查询-范围查询
 *
 * @param client ES客户端对象
 */
private static void rangeQuery(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
    rangeQueryBuilder.gte(23);
    rangeQueryBuilder.lte(28);
    sourceBuilder.query(rangeQueryBuilder);
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "范围查询结果如下:");
}

查询age字段的值在[23,28]范围内的数据

结果如下

在这里插入图片描述

3.4.8 查询指定字段
/**
 * 高级查询-查询指定字段
 *
 * @param client ES客户端对象
 */
private static void fetchSourceQuery(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 指定查询的字段
    String[] excludes = {};
    String[] includes = {"name", "age"};
    sourceBuilder.fetchSource(includes, excludes);
    // 查询所有数据
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "查询指定字段结果如下:");
}

结果如下

在这里插入图片描述

3.4.9 排序查询
/**
 * 高级查询-排序查询
 *
 * @param client ES客户端对象
 */
private static void sortQuery(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 查询所有数据
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    // 根据age字段排序,倒序
    sourceBuilder.sort("age",SortOrder.DESC);
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "排序查询结果如下:");
}

结果如下

在这里插入图片描述

3.4.10 分页查询
/**
 * 高级查询-分页查询
 *
 * @param client ES客户端对象
 */
private static void pageQuery(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 查询所有数据
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    // 分页查询
    // 开始位置 = (页码 - 1) * 页大小
    sourceBuilder.from(0);
    // 页大小
    sourceBuilder.size(4);
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "分页查询结果如下:");
}

结果如下

在这里插入图片描述

3.4.11 聚合查询
/**
 * 高级查询-聚合查询
 *
 * @param client ES客户端对象
 */
private static void aggregationsQuery(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 构建查询条件
    sourceBuilder.aggregation(AggregationBuilders.max("age_max").field("age"));
    sourceBuilder.aggregation(AggregationBuilders.min("age_min").field("age"));
    sourceBuilder.aggregation(AggregationBuilders.avg("age_avg").field("age"));
    sourceBuilder.aggregation(AggregationBuilders.sum("age_sum").field("age"));
    sourceBuilder.aggregation(AggregationBuilders.stats("age_stats").field("age"));
    sourceBuilder.aggregation(AggregationBuilders.cardinality("age_cardinality").field("age"));
    sourceBuilder.aggregation(AggregationBuilders.terms("age_group").field("age"));
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    ParsedMax ageMax = (ParsedMax) response.getAggregations().getAsMap().get("age_max");
    ParsedMin ageMin = (ParsedMin) response.getAggregations().getAsMap().get("age_min");
    ParsedAvg ageAvg = (ParsedAvg) response.getAggregations().getAsMap().get("age_avg");
    ParsedSum ageSum = (ParsedSum) response.getAggregations().getAsMap().get("age_sum");
    ParsedStats ageStats = (ParsedStats) response.getAggregations().getAsMap().get("age_stats");
    ParsedCardinality ageCardinality = (ParsedCardinality) response.getAggregations().getAsMap().get("age_cardinality");
    ParsedTerms ageGroup = (ParsedTerms) response.getAggregations().getAsMap().get("age_group");

    System.out.println(ageMax.getName() + ":" + ageMax.getValue());
    System.out.println(ageMin.getName() + ":" + ageMin.getValue());
    System.out.println(ageAvg.getName() + ":" + ageAvg.getValue());
    System.out.println(ageSum.getName() + ":" + ageSum.getValue());
    System.out.println(ageStats.getName() + ":{" + "max:" + ageStats.getMax()
                       + "," + "min:" + ageStats.getMin()
                       + "," + "avg:" + ageStats.getAvg()
                       + "," + "sum:" + ageStats.getSum()
                       + "," + "count:" + ageStats.getCount() + "}");
    System.out.println(ageCardinality.getName() + ":" + ageCardinality.getValue());
    System.out.println(ageGroup.getName() + ":" + ageGroup.getBuckets().size());
}

结果如下

在这里插入图片描述

3.4.12 高亮查询
/**
 * 高级查询-高亮查询
 *
 * @param client ES客户端对象
 */
private static void highlightQuery(RestHighLevelClient client) throws IOException {
    // 创建搜索请求对象
    SearchRequest request = new SearchRequest().indices(INDEX_NAME);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 查询所有数据
    sourceBuilder.query(QueryBuilders.matchQuery("sex","男"));
    // 高亮查询
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    // 设置标签前缀
    highlightBuilder.preTags("<font color='red'>");
    // 设置标签后缀
    highlightBuilder.postTags("</font>");
    // 设置高亮字段
    highlightBuilder.field("sex");
    sourceBuilder.highlighter(highlightBuilder);
    request.source(sourceBuilder);
    // 响应信息
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 输出结果
    printResultForSearchHighLevel(response, "高亮查询结果如下:");
}

结果如下

在这里插入图片描述
参考

【尚硅谷】ElasticSearch教程入门到精通(基于ELK技术栈elasticsearch 7.x+8.x新特性)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值