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

Elasticsearch JavaRestClient版

文章目录

    • 初始化RestHighLeveClient(必要条件)
    • 索引库操作
        • 1.创建索引库(4步)
        • 2.删除索引库(3步)
        • 3.判断索引库是否存在(3步)
        • 4.总结:四步走
    • 文档操作
        • 1.创建文档(4步)
        • 2.删除文档(3步)
        • 3.查看文档(4步)
        • 4.增量修改文档(局部更新)(4步)
        • 5.批量创建文档(4步)
        • 6.总结:五步走
    • Elasticsearch查询语法
        • 1.全文检索(5步)
          • match_all
          • match
          • multi_match
        • 2.精确查找
          • term
          • range
        • 3.复合查询
          • Bool Query(5步)
          • function score(广告置顶)
        • 排序(sort)
        • 分页(from/size)
        • 高亮(highlight)
        • 总结

初始化RestHighLeveClient(必要条件)

<!--Maven配置-->
<!--引入es的RestHignLeveClient依赖-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
<!--因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本:-->
<properties><java.version>1.8</iava.version><elasticsearch,version>7.12.1</elasticsearch.version>
</properties>//1.初始化RestHighLeveClient
RestHighLeveClient client = new RestHighLeveClient(RestClient.builder(//写自己的ES地址HttpHost.create("localhost:9200");
))

索引库操作

1.创建索引库(4步)
//2.相当于 PUT /索引名
CreateIndexRequest request = new CreateIndexRequest("索引库名");
//3.相当于请求体JSON风格
request.source("请求体",XContentType.JSON);
//4.发起请求.indices()包含索引库操作的的所有方法
client.indices().create(request,RequestOptions.DEFAULT);
2.删除索引库(3步)
// 2.相当于 DELETE /索引库名
DeleteIndexRequest request = new DeleteIndexRequest("索引库名");//3.发起请求
client.indices().create(request,RequestOptions.DEFAULT);
3.判断索引库是否存在(3步)
// 2.相当于 GET /索引库名
GetIndexRequest request = new GetIndexRequest("索引库名称");// 3.发起请求
boolean exists = client.indices.exists(request,RequestOptions.DEFAULT);//输出查看是否存在,是为true,不是为false
System.out.println(exists);
4.总结:四步走

从这里可以看出,创建索引有四步,其余只有三步

文档操作

1.创建文档(4步)
// 2.相当于POST /索引库名/_doc/文档id
IndexRequest request = new IndexRequest("索引库名").id("文档id");
// 3.准备json文档,也就是文档的内容,请求体
request.source("请求体",XContentType.JSON);
// 4.发送请求
client.index(request,RequestOptions.DEFAULT);/**注意:
*如果是请求体是实体对象,请序列化成JSON.toJSONString(请求体)
*文档id在ES默认是keyword,在java中也就是String类型,需要toString()转成字符串
*/
2.删除文档(3步)
// 2.相当于 DELETE /索引库名/_doc/文档id
DeleteRequest request = new DeleteRequest("索引库名","文档id");
// 3.发送请求
client.delete(request,RequestOptions.DEFAULT);
3.查看文档(4步)
// 2.相当于 GET /索引库名/_doc/文档id
GetRequest request = new GetRequest("索引库名","文档id");
// 3.发送请求
GetResponse response = client.get(request,RequestOptions.DEFAULT)
// 4.解析结果
String json = response.getSourceAsString();
System.out.println(json)
4.增量修改文档(局部更新)(4步)
// 2.相当于 POST /索引库名/ _update/文档id
UpdateRequest request = new UpdateRequest("indexName","文档id");// 3.准备参数
request.doc("age":18,"name":"Rose"
)
// 4.更新文档
client.update(request,RequestOptions.DEFAULT)
5.批量创建文档(4步)
// 2.创建Bulk请求
BulkRequest request = new BulkRequest();
// 3.准备参数,添加多个IndexRequest(),以实体类为例
for(Student student:students){Student student = new Student();request.add(new IndexRequest("索引库名").id(student.getId()).source(JSON.toJSONString(student),XContentType.JSON);)
}
// 4.发送请求
client.bulk(request,RequestOptions.DEFAULT)
6.总结:五步走

Elasticsearch查询语法

1.全文检索(5步)
match_all
// match_all
// 2.准备request
SearchRequest request = new SearchRequest("索引库名");
// 3.组织DSL参数
request.source.query(QueryBuilders.matchAll());
// 4.发送请求,得到结果
SearchResponse response = client.search(request,RequestOptions.DEFAULT);// 5.解析响应结果
SearchHits searchHits = response.getHits();
// 5.1获取总条数
long total = searchHits.getTotalHits().value;
// 5.2获取文档数组并且遍历
SearHits[] hits = searchHits.getHits();
for(SearchHits hit : hits){//获取文档数据源String json = hit.getSourceAaString();//反序列化HoteDoc hotelDoc = JSON.parseObject(json,HoteDoc.class);
}System.out.println(response);
match
//在match_all第5行修改
QueryBuilders.matchQuery("要查询的字段","查询的内容");
multi_match
//在match_all第5行修改
QueryBuilders.multiMatchQuery("要查询的内容","被查询的字段","被查询的字段");
2.精确查找
term
//在match_all第5行修改
QueryBuilders.termQuery("查询字段","被查询的内容")
range
//在match_all第5行修改
QueryBuilders.rangeQuery("被查询字段").get(100).lte(150)
3.复合查询
Bool Query(5步)
// 2.准备request
SearchRequest request = new SearchRequest("索引库名");
// 3.复合条件
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must();
boolQuery.filter();
// 3.1组织DSL参数
request.source.query(boolQuery);
// 4.发送请求,得到结果
SearchResponse response = client.search(request,RequestOptions.DEFAULT);// 5.解析结果
function score(广告置顶)
// 2.准备request
SearchRequest request = new SearchRequest("索引库名");// 3.复合条件
FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery(//原始查询QueryBuilders.matchAll();//functionnew FunctionScoreQueryBuilder.FilterFunctionBuilder(//过滤条件QueryBuilders.termQuery("查询字段","被查询的内容")//算分函数ScoreFunctionBuilders.weightFactorFunction(10)))
// 3.1组织DSL参数
request.source.query(functionScoreQuery);// 4.发送请求,得到结果
SearchResponse response = client.search(request,RequestOptions.DEFAULT);
排序(sort)
// 普通字段排序
request.source.sort("要排序的字段",排序方式);// 地理坐标距离排序
request.source.sort(SortBuilders.geoDistanceSort("geo_point类型字段",new GeoPoint("经度,纬度")).order(SortOrder.ASC).unit(DistanceUnit.KILOMETERS)
)
分页(from/size)
request.source.from(0).size(5);
高亮(highlight)
// 2.准备request
SearchRequest request = new SearchRequest("索引库名");
// 3.准备DSL查询出来的字段
request.source.query(QueryBuilders.matchQuery("要查询的字段","查询的内容"))
// 3.1对查询出来的字段高亮显示
request.source.highlighter(new HighlightBuilder().field("要高亮的字段").requireFieldMatch(false)//是否需要与查询字段匹配
)
// 4.发送请求
SearchResponse response = client.search(request,RequestOptions.DEFAULT);//高亮结果的处理
// 5.解析响应结果
SearchHits searchHits = response.getHits();
// 5.1获取总条数
long total = searchHits.getTotalHits().value;
// 5.2获取文档数组并且遍历
SearHits[] hits = searchHits.getHits();
for(SearchHits hit : hits){//获取文档数据源String json = hit.getSourceAaString();//反序列化HoteDoc hotelDoc = JSON.parseObject(json,HoteDoc.class);//获取高亮结果Map<String,HighlightField> highlightFields = hit.getHighlightFields();if(!CollectionUtils.isEmpty(highlightFields)){//根据字段获取高亮结果HighlightFields highlightField = highlightFields.get("name");if(highlightField != null){highlightField.getFragments()[0].string();hotelDoc.setName(name);}}
}
总结

相关文章:

Elasticsearch JavaRestClient版

文章目录 初始化RestHighLeveClient&#xff08;必要条件&#xff09;索引库操作1.创建索引库&#xff08;4步&#xff09;2.删除索引库&#xff08;3步&#xff09;3.判断索引库是否存在&#xff08;3步&#xff09;4.总结&#xff1a;四步走 文档操作1.创建文档&#xff08;4…...

ubuntu 使用s3fs配置自动挂载对象存储

一、环境准备 1.有访问对象存储权限的AKSK 2.服务器、对象存储 二、实施步骤 sudo apt update sudo apt install s3fs echo "AK:SK" >/home/ubuntu/.passwd-s3fs ---位置自定义 chmod 600 /home/ubuntu/.passwd-s3fs ---权限必须要有 mkdir /data sudo s3fs …...

SQL字符串截取函数——Left()、Right()、Substring()用法详解

SQL字符串截取函数——Left&#xff08;&#xff09;、Right&#xff08;&#xff09;、Substring&#xff08;&#xff09;用法详解 1. LEFT() 函数&#xff1a;从字符串的左侧提取指定长度的子字符串。 LEFT(string, length)string&#xff1a;要操作的字符串。length&#x…...

关系分类(RC)模型和关系抽取(RE)模型的区别

目标不同 关系分类模型&#xff1a;对给定的实体对在给定句子中预测其关系类型。两阶段&#xff08;RC&#xff09; 关系抽取模型&#xff1a;从句子中识别出所有潜在实体对&#xff0c;并为其预测关系类型。一阶段&#xff08;NERRE&#xff09; 训练/预测阶段输入输出数据不…...

什么是索引

在数据库管理系统中&#xff0c;索引是一种数据结构&#xff0c;用于快速定位数据库表中的特定记录。索引类似于一本书的目录&#xff0c;可以帮助数据库引擎迅速找到所需的数据&#xff0c;而不必扫描整个表。 类型&#xff1a;常见的数据库索引类型包括B树索引、哈希索引、全…...

OJ随机链表的复制题目分析

题目内容&#xff1a; 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a; 这道题目&#xff0c;第一眼感觉非常乱&#xff0c;这是正常的&#xff0c;但是我们经过仔细分析示例明白后&#xff0c;其实也并不是那么难。现在让我们一起来分析分析…...

UE5材质节点Distance

Distance可以计算两个物体间的距离&#xff0c;可以用来做过渡效果 当相机和物体距离3000的时候&#xff0c;就会渐渐从蓝过渡到红色&#xff0c;除以500是为了平滑过渡...

OSPF - SPF算法简述

SPF全称最短路径树算法&#xff0c;相信学过数据结构朋友应该看起来很熟悉  在一个区域内的路由器都会产生描述自己网络连接信息的LSA&#xff0c;包括两种信息&#xff0c;有路由信息和拓扑信息&#xff0c;简单的来说拓扑信息就是我连着谁&#xff0c;路由信息就是链路的地址…...

7.UE5横板2D游戏,添加分类,创建攻击,死亡逻辑,黑板实现追击玩家行为

目录 1.将变量分类 2.创建攻击 3.应用伤害逻辑 4.死亡逻辑&#xff0c;停止AI行为 5.AI追击玩家&#xff0c;使用黑板实现 1.将变量分类 2.创建攻击 创建攻击输入为鼠标左键&#xff0c;并绑定映射。 攻击动画&#xff0c;在角色状态的枚举中添加一个新的枚举 攻击输入的…...

PostgreSQL对称between比较运算

本文介绍PostgreSQL对称between比较功能&#xff1a;between symmetric&#xff0c;在动态拼接SQL时利用它可以简化判断。PostgreSQL 9.4 及以上版本支持BETWEEN SYMMETRIC操作符&#xff0c;MySQL、Oracle、MsSQL没有对应功能。 between 比较 PostgreSQL的between结构允许你对…...

Spring AOP面向切面编程

Spring AOP面向切面编程 面向切面编程AOP作用AOP功能AOP总结 AOP核心概念AOP的实现方式Spring 对AOP支持支持Aspect声明一个切面声明一个切入点AspectJ描述符如下AspectJ类型匹配的通配符常用的匹配规则 声明增强 用AOP实现日志拦截一般的实现仅拦截需要的方法先定义一个日志注…...

Visual Studio 中增加的AI功能

前言&#xff1a; 人工智能的发展&#xff0c;在现在&#xff0c;编程技术的IDE里面也融合了AI的基本操做。本例&#xff0c;以微软的Visual Studio中的人工智能的功能介绍例子。 本例的环境&#xff1a; Visual Studio 17.12 1 AI 智能变量检测&#xff1a; 上图展示了一…...

15. 接雨水

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(…...

从索尼爱立信手机打印短信的简单方法

昨天&#xff0c;我买了一部新手机来代替我的旧索尼爱立信Xperia&#xff0c;但手机上有很多珍贵的短信&#xff0c;是我男朋友发来的&#xff0c;我不想失去它们。然后我尝试打印它们&#xff0c;但我无法从我的索尼爱立信手机中取出它们。您有什么从索尼爱立信手机打印短信的…...

Java-list均分分割到多个子列表

在Java中,如果你有一个List并且想要将其均分到多个子列表中,可以使用以下方法。假设你有一 个List<T>,并且想要将其分成n个子列表。 import java.util.ArrayList; import java.util.List;public class ListSplitter {public static <T> List<List<T>…...

kettle合并表数据

总体执行图&#xff1a;以两个数据表作为输入&#xff0c;根据关键栏位进行合并后&#xff0c;以excel表输出。 两表数据输入 需要确定查询的表名 2. 根据关键栏位进行排序。在记录集连接之前需要进行排序操作 3. 记录连接与合并 此方式表示select EQP_ID, ID FROM T_EQP_C…...

蓝耘平台使用InstantMesh‌生成高质量的三维网格模型!3D内容创作!小白入门必看!!!

目录 引言 InstantMesh应用介绍 蓝耘平台与InstantMesh结合使用 如何部署&#xff08;超简单&#xff09; 第一步登录蓝耘平台 第二步点击应用商城 ​编辑 第三步选择InstantMesh 第四步点击部署 第五步点击快速启动应用 第六步即可体验该产品 总结 注册链接 引言…...

关于IDE的相关知识之二【插件推荐】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件推荐的相关内容&#xff01…...

oceanbase集群访问异常问题处理

1.报错现象 2.问题排查 检查obproxy状态发现为不可用状态 重启obproxy 依次重启Obproxy集群 观察任务状态 重启完成 Obproxy状态正常 3.验证登录 登录成功...

Linux(centos)安装 MySQL 8 数据库(图文详细教程)

前言 前几天写了个window系统下安装Mysql的博客&#xff0c;收到很多小伙伴私信需要Linux下安装Mysql的教程&#xff0c;今天这边和大家分享一下&#xff0c;话不多说&#xff0c;看教程。 一、删除以前安装的MySQL服务 一般安装程序第一步都需要清除之前的安装痕迹&#xff…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...