ElasticSearch学习5-- 使用RestClient查询文档

1、查询基本步骤

1、创建SearchRequest对象
2、准备Request.source(),也就是DSL。
        QueryBuilders来构建查询条件
       传入Request.source() 的 query() 方法
3、发送请求,得到结果
4、解析结果(参考JSON结果,从外到内,逐层解析)

RestAPI中其中构建DSL是通过HighLevelRestClient中的resource()返回的SearchSourceBuilder来实现的,其中包含了查询、排序、分页、高亮等所有功能

SearchSourceBuilder 进行查询、排序、分页、高亮

RestAPI中其中构建查询条件的核心部分是由一个名为QueryBuilders的工具类提供的,其中包含了各种查询方法。

QueryBuilders 进行match_all /match /multi_match /term /range/boolmatch等查询

查询所有

    @Testpublic void testMatchAll() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是所有查询MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();//将查询条件赋值给查询语句request.source().query(matchAllQueryBuilder);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}

2、多种检索查询

match、multi_match查询

    @Testpublic void testMatchQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是所有查询MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("fileId","赎吧");//将查询条件赋值给查询语句request.source().query(queryBuilder);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}
@Testpublic void testMultiMatchQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是所有查询MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("B端赎吧","fileId","caseDes");//将查询条件赋值给查询语句request.source().query(queryBuilder);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}

term 、range查询

@Testpublic void testTermQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是所有查询TermQueryBuilder queryBuilder = QueryBuilders.termQuery("oa","lilan04");//将查询条件赋值给查询语句request.source().query(queryBuilder);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}@Testpublic void testRangeQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("test_1");//构建查询条件,下边是所有查询RangeQueryBuilder queryBuilder = QueryBuilders.rangeQuery("age").gte(10).lte(20);//将查询条件赋值给查询语句request.source().query(queryBuilder);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}

布尔查询

 @Testpublic void testBooleanQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是所有查询BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();queryBuilder.must(QueryBuilders.matchQuery("oa","lilan04"));queryBuilder.should(QueryBuilders.rangeQuery("editTime").gte(1684740000000L).lte(1684740070219l));queryBuilder.filter(QueryBuilders.termQuery("isDelete",1));//将查询条件赋值给查询语句request.source().query(queryBuilder);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}

分页、排序、高亮查询

@Testpublic void testSortQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是布尔查询BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();queryBuilder.must(QueryBuilders.matchQuery("oa","lilan04"));queryBuilder.should(QueryBuilders.rangeQuery("editTime").gte(1684740000000L).lte(1684740070219l));queryBuilder.filter(QueryBuilders.termQuery("isDelete",1));//将查询条件赋值给查询语句request.source().query(queryBuilder);//排序request.source().sort("editTime", SortOrder.ASC);//分页request.source().from(1).size(10);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);}@Testpublic void testHightLightQuery() throws IOException {//创建查询请求,指定要查询的索引库SearchRequest request = new SearchRequest("case_management");//构建查询条件,下边是布尔查询BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();queryBuilder.must(QueryBuilders.matchQuery("oa","lilan04"));queryBuilder.should(QueryBuilders.rangeQuery("editTime").gte(1684740000000L).lte(1684740070219l));queryBuilder.filter(QueryBuilders.termQuery("isDelete",1));//将查询条件赋值给查询语句request.source().query(queryBuilder);//自定义高亮 查找HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.preTags("<font color='red'>");highlightBuilder.postTags("</font>");highlightBuilder.field("oa");// highlightBuilder.requireFieldMatch(false); //多字段时,需要设置为false// request.source().highlighter(highlightBuilder);//排序request.source().sort("editTime", SortOrder.ASC);//分页request.source().from(1).size(10);//进行查询SearchResponse response = client.search(request, RequestOptions.DEFAULT);System.out.println("respon话费时间 " + response.getTook());//对结果进行处理SearchHits hits = response.getHits();//返回结果列表SearchHit[] hitsList = hits.getHits();//总数long totalHits = hits.getTotalHits();System.out.println(totalHits);SearchHit documentFields = hitsList[0];String json = documentFields.getSourceAsString();System.out.println(json);//获取到高亮字段System.out.println(documentFields.getHighlightFields());}

3、错误解决

场景

    ES对text类型的字段进行聚合操作的时候, 报 Fielddata is disabled on text fields by default. Set fielddata=true on [make] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.

分析

    官方文档
    sort, aggregate, or access values from a script on a text field 这些行为会需要从内存中加载数据, 但是text类型的数据可能会消耗非常多内存, 另外可能会导致查询延迟, 所以默认不允许对text字段这样操作
所以最好对非text类型字段进行排序等操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国标视频融合云平台EasyCVR视频汇聚平台关于远程控制的详细介绍

EasyCVR国标视频融合云平台是一个能在复杂网络环境下统一汇聚、整合和集中管理各类分散视频资源的平台。该平台提供了多种视频能力和服务&#xff0c;包括视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、集群、电子地图、H.265视频自动转码和智能分析等…

几种Go版本管理工具

缘起: 编译下面这段代码时,在Mac上没有什么问题,正常运行, 点击查看代码: package mainimport ( "bytes" "encoding/binary" "encoding/json" "fmt" "log" "math/rand" "net/http" "time")fu…

C++包含整数各位重组

void 包含整数各位重组() {//缘由https://bbs.csdn.net/topics/395402016int shu 100000, bs 4, bi shu * bs, a 0, p 0, d 0;while (shu < 500000)if (a<6 && (p to_string(shu).find(to_string(bi)[a], p)) ! string::npos && (d to_string(bi…

【微服务部署】07-调用链追踪

文章目录 集成SkyWalking实现调用链追踪1. SkyWalking架构图2. 代码集成SkyWalking 集成SkyWalking实现调用链追踪 1. SkyWalking架构图 Receiver是SkyWalking的入口&#xff0c;支持gRPC和HTTP协议。 SkyWalking内部有分析和查询两个部分 存储方面SkyWalking支持Elasticsearc…

Windows下Git Bash调用rsync

rsync 提供了补充只需要在git安装目录下放入对应的文件即可。 需要将这个三个文件放到git的bin目录下 如果是默认安装路径是如下&#xff1a; C:\Program Files\Git\usr\bin 然后大功告成。

【Vue2】 axios库

网络请求库-axios库 认识Axios库为什么选择Axios库安装Axios axios发送请求常见的配置选项简单请求可以给Axios设置公共的基础配置发送多个请求 axios创建实例为什么要创建axios的实例 axios的拦截器请求拦截器响应拦截器 axios请求封装 认识Axios库 为什么选择Axios库 在游览…

105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 思路&#xff1a;题目给出了先序遍历和中序遍历的结果&#xff0c;因为先序遍历遵循根–>左–>…

21 自定义miniweb框架|闭包装饰器|log输出

文章目录 前情知识介绍WSIG-miniWeb框架服务器动态资源请求浏览器请求动态页面的全流程WSGIWSGI接口的定义 静态服务器回顾以及改造web 服务器 和 逻辑处理代码 分离 web动态服务器的基本实现带参数的web动态服务器 闭包装饰器闭包闭包的基础使用函数、匿名函数、闭包、对象修改…

Nat. Commun.2023 | AI-Bind+:提高蛋白质配体结合预测的通用性

论文标题&#xff1a;Improving the generalizability of protein-ligand binding predictions with AI-Bind 论文地址&#xff1a;Improving the generalizability of protein-ligand binding predictions with AI-Bind | Nature Communications 代码&#xff1a; Barabasi…

华为数通方向HCIP-DataCom H12-821题库(单选题:181-200)

第181题 某管理员需要创建AS Path过滤器(ip as-path-iter),允许AS_Path中包含65001的路由通过,那么以下哪一项配置是正确的? A、​​ip as-path-filter 1 permit 65001​​ B、​​ip as-path-filter 1 permit "65001​​ C、​​ip as-path-filter 1 permit *6500…

wxWidgets从空项目开始Hello World

前文回顾 接上篇&#xff0c;已经是在CodeBlocks20.03配置了wxWidgets3.0.5&#xff0c;并且能够通过项目创建导航创建一个新的工程&#xff0c;并且成功运行。 那么上一个是通过CodeBlocks的模板创建的&#xff0c;一进去就已经是2个头文件2个cpp文件&#xff0c;总是感觉缺…

Pygame中Trivia游戏解析6-3

3.3 Trivia类的show_question()函数 Trivia类的show_question()函数的作用是显示题目。主要包括显示题目框架、显示题目内容和显示题目选项等三部分。 3.3.1 显示题目的框架 在show_question()函数中&#xff0c;通过以下代码显示题目的框架。 print_text(font1, 210, 5, &q…

docker-compose 部署nacos 整合 postgresql 为DB

标题docker-compose 部署nacos 整合 postgresql 为DB 前提&#xff1a; 已经安装好postgresql数据库 先创建好一个数据库 nacos&#xff0c;执行以下sql: /** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "…

二进制转换16进制 快速心算

1111 1110 ---> 0xFE 1111 为 8 4 2 1 ---> 8 4 2 1 15 --> 16进制表示为F1110 为 8 4 2 0 ---> 8 4 2 0 14 --> 16进制表示为E

Ubuntu本地快速搭建web小游戏网站,公网用户远程访问【内网穿透】

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互联网&am…

WebSocket(一)

一.什么是WebSocket 【1】WebSocket是一种协议&#xff0c;设计用于提供低延迟&#xff0c;全双工和长期运行的连接。 全双工&#xff1a;通信的两个参与方可以同时发送和接收数据&#xff0c;不需要等待对方的响应或传输完成。 【2】比较 传统通信&#xff08;http协议&am…

【LeetCode】1654:到家的最少跳跃次数的解题思路 关于力扣无法return的BUG的讨论

文章目录 一、题目二、题解与代码三、神奇的BUG3.1 无法执行的 return 和 break 语句3.2 通过另一个 break 解决 一、题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位…

java.sql.SQLException: com.mysql.cj.jdbc.Driver

这篇文章分享一下Springboot整合Elasticsearch时遇到的一个问题&#xff0c;项目正常启动&#xff0c;但是查询数据库的时候发生了一个异常java.sql.SQLException: com.mysql.cj.jdbc.Driver java.sql.SQLException: com.mysql.cj.jdbc.Driverat com.alibaba.druid.util.JdbcU…

软件测试/测试开发丨Pytest和Allure报告 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/26755 Pytest 命名规则 类型规则文件test_开头 或者 _test 结尾类Test 开头方法/函数test_开头注意&#xff1a;测试类中不可以添加__init__构造函数 注…

Open3D(C++) 点云格网分块

目录 一、算法概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法概述 点云格网分块是点云二维格网化的一个具体应用案例,与Open3D (C++) 使用点云创建数字高程模型DEM类似,对每个格…