Easysearch Java SDK 2.0.x 使用指南(一)

news/2024/12/15 23:07:16/文章来源:https://www.cnblogs.com/infinilabs/p/18608873

各位 Easysearch 的小伙伴们,我们前一阵刚把 easysearch-client 更新到了 2.0.2 版本!借此详细介绍下新版客户端的使用。

新版客户端和 1.0 版本相比,完全重构,抛弃了旧版客户端的一些历史包袱,从里到外都焕然一新!不管是刚入门的小白还是经验丰富的老司机,2.0.x 客户端都能让你开发效率蹭蹭往上涨!

到底有啥新东西?

  • 更轻更快: 以前的版本依赖了一堆乱七八糟的东西,现在好了,我们把那些没用的都砍掉了,客户端变得更苗条,性能也杠杠的!
  • 类型安全,告别迷糊: 常用的 Easysearch API 现在都配上了强类型的请求和响应对象,再也不用担心写错参数类型了,代码也更好看了,维护起来也更省心!
  • 同步异步,想咋用咋用: 所有 API 都支持同步和异步两种调用方式,不管是啥场景,都能轻松应对!
  • 构建查询,跟搭积木一样简单: 我们用了流式构建器和函数式编程,构建复杂查询的时候,代码写起来那叫一个流畅,看着也舒服!
  • 和 Jackson 无缝对接: 可以轻松地把你的 Java 类和客户端 API 关联起来,数据转换嗖嗖的快!

快速上手

废话不多说,咱们直接上干货!这部分教你怎么快速安装和使用 easysearch-client 2.0.2 客户端,还会演示一些基本操作。

安装

easysearch-client 2.0.2 已经上传到 Maven 中央仓库了,加到你的项目里超级方便。

最低要求: JDK 8 或者更高版本

依赖管理: 客户端内部用 Jackson 来处理对象映射。

Maven 项目

在你的 pom.xml 文件的 <dependencies> 里面加上这段:

<dependencies><dependency><groupId>com.infinilabs</groupId><artifactId>easysearch-client</artifactId><version>2.0.2</version></dependency>
</dependencies>

Gradle 项目

在你的 build.gradle 文件的 dependencies 里面加上这段:

dependencies {implementation 'com.infinilabs:easysearch-client:2.0.2'
}

初始化客户端

下面这段代码演示了怎么初始化一个启用了安全通信加密和 security 的 Easysearch 客户端,看起来有点长,别慌,我们一步一步解释!

 public static EasysearchClient create() throws NoSuchAlgorithmException, KeyStoreException,KeyManagementException {final HttpHost[] hosts = new HttpHost[]{new HttpHost("localhost", 9200, "https")};final SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, (chains, authType) -> true).build();SSLIOSessionStrategy sessionStrategy = new SSLIOSessionStrategy(sslContext, NoopHostnameVerifier.INSTANCE);final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "passwowd"));RestClient restClient = RestClient.builder(hosts).setHttpClientConfigCallback(httpClientBuilder ->httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider).setSSLStrategy(sessionStrategy).disableAuthCaching()).setRequestConfigCallback(requestConfigCallback ->requestConfigCallback.setConnectTimeout(30000).setSocketTimeout(300000)).build();EasysearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());return new EasysearchClient(transport);}

这段代码,简单来说,就是:

  1. 连上 Easysearch: 我们要用 HTTPS 连接到本地的 9200 端口。
  2. 搞定证书: 这里为了方便,我们信任了所有证书(注意!生产环境一定要配置好你们自己的证书)。
  3. 填上用户名密码: 这里需要填上你的用户名和密码。
  4. 设置连接参数: 设置了连接超时时间(30 秒)和读取超时时间(300 秒)。
  5. 创建客户端: 最后,我们就创建好了一个 EasysearchClient 实例,可以开始干活了!

举个栗子:批量操作

下面的例子演示了怎么用 bulk API 来批量索引数据:

 public static void bulk() throws Exception {String json2 = "{"+ "    \"@timestamp\": \"2023-01-08T22:50:13.059Z\","+ "    \"agent\": {"+ "      \"version\": \"7.3.2\","+ "      \"type\": \"filebeat\","+ "      \"ephemeral_id\": \"3ff1f2c8-1f7f-48c2-b560-4272591b8578\","+ "      \"hostname\": \"ba-0226-msa-fbl-747db69c8d-ngff6\""+ "    }"+ "}";EasysearchClient client = create();BulkRequest.Builder br = new BulkRequest.Builder();br.index("test1");for (int i = 0; i < 10; i++) {BulkOperation.Builder builder = new BulkOperation.Builder();IndexOperation.Builder indexBuilder = new IndexOperation.Builder();builder.index(indexBuilder.document(JsonData.fromJson(json2)).build());br.operations(builder.build());}for (int i = 0; i < 10; i++) {BulkOperation.Builder builder = new BulkOperation.Builder();IndexOperation.Builder indexBuilder = new IndexOperation.Builder();indexBuilder.document(JsonData.fromJson(json2)).index("test2");builder.index(indexBuilder.build());br.operations(builder.build());}for (int i = 0; i < 10; i++) {Map<String, Object> map = new HashMap<>();map.put("@timestamp", "2023-01-08T22:50:13.059Z");map.put("field1", "value1");IndexOperation.Builder indexBuilder = new IndexOperation.Builder();indexBuilder.document(map).index("test3");br.operations(new BulkOperation(indexBuilder.build()));}BulkResponse bulkResponse = client.bulk(br.build());if (bulkResponse.errors()) {for (BulkResponseItem item : bulkResponse.items()) {System.out.println(item.toString());}}client._transport().close();}

这个例子里,我们一口气把数据批量索引到了 test1test2test3 这三个索引里,
并且展示了三种在 bulk API 中构建 IndexOperation 的方式,虽然它们最终都能实现将文档索引到 Easysearch,但在使用场景和灵活性上还是有一些区别的:

这段代码的核心是利用 BulkRequest.Builder 来构建一个批量请求,并通过 br.operations(...) 方法添加多个操作。而每个操作,在这个例子里,都是一个 IndexOperation,也就是索引一个文档。IndexOperation 可以通过 IndexOperation.Builder 来创建。

三种方式的区别主要体现在如何构建 IndexOperation 里的 document 部分,也就是要索引的文档内容。

第一种方式:使用 JsonData.fromJson(json2) 且不指定索引。

特点:
使用 JsonData.fromJson(json2) 将一个 JSON 字符串直接转换成 JsonData 对象作为文档内容。
这里没有在 IndexOperation.Builder 上调用 index() 方法来指定索引名称。由于没有在每个 IndexOperation 中指定索引,这个索引名称将回退到 BulkRequest.Builder 上设置的索引,即 br.index("test1"),所以这 10 个文档都会被索引到 test1。
当你需要将一批相同结构的 JSON 文档索引到同一个索引时,这种方式比较简洁。

第二种方式:使用 JsonData.fromJson(json2) 并指定索引

特点:
同样使用 JsonData.fromJson(json2) 将 JSON 字符串转换成 JsonData 对象。
关键区别在于,这里在 IndexOperation.Builder 上调用了 index("test2"),为每个操作单独指定了索引名称。
这 10 个文档会被索引到 test2,即使 BulkRequest.Builder 上设置了 index("test1") 也没用,因为 IndexOperation 里的设置优先级更高。
当你需要将一批相同结构的 JSON 文档索引到不同的索引时,就需要使用这种方式来分别指定索引。

第三种方式:使用 Map<String, Object> 并指定索引

特点:
使用 Map<String, Object> 来构建文档内容,这种方式更加灵活,可以构建任意结构的文档。
同样在 IndexOperation.Builder 上调用了 index("test3") 指定了索引名称。
使用 new BulkOperation(indexBuilder.build()) 代替之前的 builder.index(indexBuilder.build()), 这是等价的。
这 10 个文档会被索引到 test3。
当你需要索引的文档结构不固定,或者你需要动态构建文档内容时,使用 Map 是最佳选择。例如,你可以根据不同的业务逻辑,往 Map 里添加不同的字段。

总结

这次 easysearch-client 2.0.x Java 客户端的更新真的很给力,强烈建议大家升级体验!相信我,用了新版客户端,你的开发效率绝对会提升一大截!


想要了解更多?

  • 客户端 Maven 地址: https://mvnrepository.com/artifact/com.infinilabs/easysearch-client/2.0.2

  • 更详细的文档和示例代码在 官网 持续更新中,请随时关注!

大家有啥问题或者建议,也欢迎随时反馈!

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。

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

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

相关文章

综合设计 ——多源异构数据采集与融合应用综合实践

综合设计 ——多源异构数据采集与融合应用综合实践 码云地址这个项目属于哪个课程 <班级的链接>组名、项目简介 组名:黑马楼:直面爬虫 项目需求:实现宠物具体种类的识别 项目目标:根据用户上传的文本和图片识别具体的宠物种类 项目开展技术路线:html,css,js,flask团…

飞腾派笔记

飞腾派4g版本开箱体验 开箱包裹内容打开包装,你可以看到以下物品一个绿联的usb3.0读卡器、sandisk的32g内存卡(太好了) 飞腾派4g版本开发板带散热风扇(通过DDR存储的丝印看到是长鑫存储,即为4g内存版本) 输出为12v 3A的电源适配器图1 开箱物品内容图2 飞腾派4g版本正面图3 …

accounts

wait for u <3Personality - kintsgi (zeroland) Luogu : kintsgi Codeforces : pentiment (becoming zeroland), cellophane UOJ : 0land LOJ : Nickarc Vjudge : Acord145,kintsgi qoj : kintsgi,zeroland Personality - Komomo Luogu : Komomo Codeforces : 0land (bec…

DataGrip: MySQL数据库图形化开发工具

一、DataGrip介绍 DataGrip是JetBrains公司推出的管理数据库的产品,功能非常强大,可以兼容各种数据库,另外,JetBrains公司还有一款知名的IDE开发工具IDEA,用户体验非常不错。 下载地址 https://www.jetbrains.com/datagrip/download/#section=windows二、DataGrip安装 下载…

2024-2025-1 20241408陈烨南《计算机基础与程序设计》第十二周学习总结

2024-2025-1 20241408陈烨南《计算机基础与程序设计》第十一周学习总结这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标 无作业正文 本博客链接教材学习内容总结 一、指针与数…

2025年知识库趋势:AI工具引领变革

随着数字化转型的深化,企业内部知识库已成为推动企业创新、提升团队协作效率的核心要素。展望2025年,企业内部知识库将呈现出哪些新趋势?AI工具又将如何在这场变革中发挥引领作用?本文旨在探讨这些问题,为企业构建未来知识管理战略提供参考。一、2025年知识库新趋势 智能化…

SkiaSharp部署到Linux不工作,提示libSkiaSharp.so找不到的解决办法

Nuget安装下面的包即可解决,SkiaSharp.NativeAssets.Linux.NoDependecies

403绕过神器: 4-ZERO-3

免责声明 本公众号分享的安全工具和项目均来源于网络,仅供学术交流,请勿直接用于任何商业场合和非法用途。如用于其它用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。介绍 4-ZERO-3 工具可绕过 403/401。此脚本包含所有可能的技术来实现相同的目的。 注意…

拉格朗日插值和数值微积分

+++ date = 2024-11-30T15:26:27+08:00 draft = true title = 拉格朗日插值和数值微积分 +++ 初次发布于我的个人文档。(每次都是个人文档优先发布哦) 本文想简要介绍和推导一下拉格朗日插值和数值积分方法。 什么是插值? 所谓的插值就是已知几个离散点的信息视图求一个满足…

linux之slb四层负载(lvs)

负载均衡-动静分离slb四层负载LVS(Linux Virtual Server) 是一个开源的负载均衡解决方案,运行在 Linux 操作系统上,用于在多个后端服务器之间分配客户端的请求,从而实现高可用性和负载均衡。它通常用于大规模网站、应用程序和微服务的架构中,适用于高并发场景,以提高系统…

CLion配置cout打印语句快捷键

点击菜单栏的 File -> Settings->Editor -> Live Templates 点击 Define,选择 C++。 点击Apply 和 OK 保存。 当我们sout时,自动出现打印语句。 本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18608801,如有侵权…

域名信息

引子:上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时,其域名信息该如何收集。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.1 域名信息引子:上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时,其…