提问要多花一点心思哦

【搜索客社区日报】第1970期 (2025-01-13)

1、如何监控 Elasticsearch 集群健康状态并实现邮件自动预警?
https://mp.weixin.qq.com/s/6K2PHQUdKXt4pngSjWmQRw

2、快速上手 INFINI Console 的 TopN 指标功能
https://infinilabs.cn/blog/202 ... rics/

3、介绍 Easysearch 的 Rollup
https://infinilabs.cn/blog/202 ... llup/

4、极致 ElasticSearch 调优,让你的ES 狂飙100倍!
https://mp.weixin.qq.com/s/7dYZp-NwNQMLRrdOjcNj5w

5、【Elasticsearch】批量操作:优化性能
https://blog.csdn.net/lilinhai ... 06354

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、如何监控 Elasticsearch 集群健康状态并实现邮件自动预警?
https://mp.weixin.qq.com/s/6K2PHQUdKXt4pngSjWmQRw

2、快速上手 INFINI Console 的 TopN 指标功能
https://infinilabs.cn/blog/202 ... rics/

3、介绍 Easysearch 的 Rollup
https://infinilabs.cn/blog/202 ... llup/

4、极致 ElasticSearch 调优,让你的ES 狂飙100倍!
https://mp.weixin.qq.com/s/7dYZp-NwNQMLRrdOjcNj5w

5、【Elasticsearch】批量操作:优化性能
https://blog.csdn.net/lilinhai ... 06354

编辑:Muse
更多资讯:http://news.searchkit.cn 收起阅读 »

INFINI Labs 产品更新 | Console 发布 TopN 功能,Easysearch 新增 Rollup 能力等

release

INFINI Labs 产品全新发布!此次更新为大家带来了 Console 的全新 TopN 功能,让您能够更高效地定位最关键的节点或索引;Easysearch 新增 Rollup 能力,大幅提升监控指标的存储周期并优化分析体验;此外,Framework 还修复了多项缺陷并进行了多处优化。欢迎下载体验,探索更多可能!

INFINI Console v1.28.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。

Console 在线体验:

http://demo.infini.cloud (用户名/密码:readonly/readonly)。

亮点更新

1. 重磅发布 Console 的 TopN 功能

随着集群节点数和索引数的不断增加,传统的监控方式已难以满足高效定位问题的需求。在过去,Console 的监控分析功能更多聚焦于单个节点或单个索引的多维指标,但当用户需要快速从所有节点或索引中找到 最忙、最慢 或 最大 的关键数据点时,往往显得非常不便。

尽管 Console 提供了强大的高级分析功能,但面对大量指标时,加载速度较慢、指标过于密集,难以直观发现问题。TopN 的推出,旨在解决这些痛点,为用户提供更加精准、高效的监控分析能力。

TopN 是 Console v1.28.0 中新增的主要功能,用于快速识别排名前 N 的关键指标数据点。它通过强大的多维度横向指标对比分析能力,帮助用户更高效地进行性能优化与决策分析。

关于 TopN 具体如何使用,请查看这篇单独的博客:快速上手 INFINI Console 的 TopN 指标功能

2. 集群动态 - 记录分片未分配原因

集群动态是一个用于查看集群全局关键事件的模块,当集群健康状态变为红色时,通常需要分析导致变红的原因。尤其是对历史某次集群变红的原因进行回溯,这对于故障诊断和分析极为重要。

在此次更新中,我们引入了一项新功能:当集群健康状态变红时,系统会自动记录导致变红的详细原因。这一功能为长期故障跟踪和诊断提供了宝贵的数据支持,使问题定位和解决更加高效。

Console 本次详细更新记录如下:

功能更新

  • 支持在 Insight 数据查询 API 中查询 Top N 指标。
  • 在集群健康状态变为红色后,将集群分配活动的解释记录到集群动态日志中。
  • 为索引增加了新的段内存指标(包括 norms、points、version map、fixed bit set)。
  • 新增 Insight 指标 CURD API,用于管理自定义指标。
  • 添加了多个常见用例的内置指标模板。

问题修复

  • 修复了当集群 UUID 为空时查询线程池指标的问题。
  • 修复了单元测试中的问题。

优化改进

  • 修复 GitHub Issues #46 和 #43,完善 GitHub Actions CI 流水线。
  • 优化了 Agent 列表的 UI,当列数据溢出时能更好显示。
  • 在概览表格的每一行添加了加载动画。
  • 支持通过集群 ID 和集群 UUID 查询指标。
  • 优化了指标查询的桶大小设置 (#59)。
  • 在监控图表中,如果数据由于时间间隔小于收集间隔而无数据显示,添加了提示。
  • 检查集群版本是否支持 metric transport_outbound_connections。
  • 将 DatePicker 的时间设置默认超时时间调整为 10 秒。
  • 强化了 http_client,支持更多自定义配置选项。

INFINI Easysearch v1.10.0

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

Easysearch 本次更新如下:

功能更新

  • Rollup 功能增强:新增并发限制、任务失败自动重启功能,支持批量启动、停止 Job, 并支持 date_range 聚合。
  • 字段类型功能优化:新增 flattened_text 和 match_only_text 字段类型,支持更多查询场景;

关于 Rollup 具体如何使用,请查看这篇单独的博客:介绍 Easysearch 的 Rollup

INFINI Framework v1.1.0

功能更新

  • 将指标收集任务设置为单例模式,提高执行效率。(#17)
  • 在集群健康状态变为红色时,将集群分配解释记录到活动日志中。
  • 新增 Elastic API 方法 ClusterAllocationExplain。
  • 在指标配置中添加 min_bucket_size 和 hits_total 选项。(#29)
  • 在 http_client 配置部分中新增代理设置。(#33)
  • 添加新条件,用于校验数组和字符串等项目的长度。(#38)
  • 增强 HTTP 处理器工具,支持按状态码写入字节流。(#55)

重大变更

  • 更新 WebSocket 握手消息头,改用 websocket-session-id 以增强会话标识能力。

问题修复

  • 移除节点状态任务中多余的集群统计指标收集逻辑。(#17)
  • 修复集群指标主开关不起作用的问题。(#17)
  • 修复集群状态变为可用后元数据未能即时生效的问题。(#23)
  • 允许在处理多个缺口的文件时跳过下一文件。(#22)
  • 移除每节点指标收集逻辑以提升性能。(#26)
  • 修正从基本身份验证中解析密码的问题。(#31)
  • 修复指标收集任务间隔设置未生效的问题。(#30)
  • 解决无效数据目录问题,直接使用 appname 进行配置。(#46)
  • 修正健康 API 中系统集群健康状态的错误报告。(#39)

优化改进

  • 添加框架和依赖库的提交哈希,增强可追溯性。
  • 在应用初始化时自动去除输入变量中的多余空格。
  • 初次访问时自动初始化 Badger 数据库。(#27)
  • 在日志信息中添加搜索响应详情,增强诊断能力。(#28)

更多详情请查看以下详细的 Release Notes 或联系我们的技术支持团队!

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

下载地址: https://infinilabs.cn/download

邮件hello@infini.ltd

电话(+86) 400-139-9200

Discordhttps://discord.gg/4tKTMkkvVX

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

关于极限科技(INFINI Labs)

INFINI Labs

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://infinilabs.cn

继续阅读 »

release

INFINI Labs 产品全新发布!此次更新为大家带来了 Console 的全新 TopN 功能,让您能够更高效地定位最关键的节点或索引;Easysearch 新增 Rollup 能力,大幅提升监控指标的存储周期并优化分析体验;此外,Framework 还修复了多项缺陷并进行了多处优化。欢迎下载体验,探索更多可能!

INFINI Console v1.28.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。

Console 在线体验:

http://demo.infini.cloud (用户名/密码:readonly/readonly)。

亮点更新

1. 重磅发布 Console 的 TopN 功能

随着集群节点数和索引数的不断增加,传统的监控方式已难以满足高效定位问题的需求。在过去,Console 的监控分析功能更多聚焦于单个节点或单个索引的多维指标,但当用户需要快速从所有节点或索引中找到 最忙、最慢 或 最大 的关键数据点时,往往显得非常不便。

尽管 Console 提供了强大的高级分析功能,但面对大量指标时,加载速度较慢、指标过于密集,难以直观发现问题。TopN 的推出,旨在解决这些痛点,为用户提供更加精准、高效的监控分析能力。

TopN 是 Console v1.28.0 中新增的主要功能,用于快速识别排名前 N 的关键指标数据点。它通过强大的多维度横向指标对比分析能力,帮助用户更高效地进行性能优化与决策分析。

关于 TopN 具体如何使用,请查看这篇单独的博客:快速上手 INFINI Console 的 TopN 指标功能

2. 集群动态 - 记录分片未分配原因

集群动态是一个用于查看集群全局关键事件的模块,当集群健康状态变为红色时,通常需要分析导致变红的原因。尤其是对历史某次集群变红的原因进行回溯,这对于故障诊断和分析极为重要。

在此次更新中,我们引入了一项新功能:当集群健康状态变红时,系统会自动记录导致变红的详细原因。这一功能为长期故障跟踪和诊断提供了宝贵的数据支持,使问题定位和解决更加高效。

Console 本次详细更新记录如下:

功能更新

  • 支持在 Insight 数据查询 API 中查询 Top N 指标。
  • 在集群健康状态变为红色后,将集群分配活动的解释记录到集群动态日志中。
  • 为索引增加了新的段内存指标(包括 norms、points、version map、fixed bit set)。
  • 新增 Insight 指标 CURD API,用于管理自定义指标。
  • 添加了多个常见用例的内置指标模板。

问题修复

  • 修复了当集群 UUID 为空时查询线程池指标的问题。
  • 修复了单元测试中的问题。

优化改进

  • 修复 GitHub Issues #46 和 #43,完善 GitHub Actions CI 流水线。
  • 优化了 Agent 列表的 UI,当列数据溢出时能更好显示。
  • 在概览表格的每一行添加了加载动画。
  • 支持通过集群 ID 和集群 UUID 查询指标。
  • 优化了指标查询的桶大小设置 (#59)。
  • 在监控图表中,如果数据由于时间间隔小于收集间隔而无数据显示,添加了提示。
  • 检查集群版本是否支持 metric transport_outbound_connections。
  • 将 DatePicker 的时间设置默认超时时间调整为 10 秒。
  • 强化了 http_client,支持更多自定义配置选项。

INFINI Easysearch v1.10.0

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

Easysearch 本次更新如下:

功能更新

  • Rollup 功能增强:新增并发限制、任务失败自动重启功能,支持批量启动、停止 Job, 并支持 date_range 聚合。
  • 字段类型功能优化:新增 flattened_text 和 match_only_text 字段类型,支持更多查询场景;

关于 Rollup 具体如何使用,请查看这篇单独的博客:介绍 Easysearch 的 Rollup

INFINI Framework v1.1.0

功能更新

  • 将指标收集任务设置为单例模式,提高执行效率。(#17)
  • 在集群健康状态变为红色时,将集群分配解释记录到活动日志中。
  • 新增 Elastic API 方法 ClusterAllocationExplain。
  • 在指标配置中添加 min_bucket_size 和 hits_total 选项。(#29)
  • 在 http_client 配置部分中新增代理设置。(#33)
  • 添加新条件,用于校验数组和字符串等项目的长度。(#38)
  • 增强 HTTP 处理器工具,支持按状态码写入字节流。(#55)

重大变更

  • 更新 WebSocket 握手消息头,改用 websocket-session-id 以增强会话标识能力。

问题修复

  • 移除节点状态任务中多余的集群统计指标收集逻辑。(#17)
  • 修复集群指标主开关不起作用的问题。(#17)
  • 修复集群状态变为可用后元数据未能即时生效的问题。(#23)
  • 允许在处理多个缺口的文件时跳过下一文件。(#22)
  • 移除每节点指标收集逻辑以提升性能。(#26)
  • 修正从基本身份验证中解析密码的问题。(#31)
  • 修复指标收集任务间隔设置未生效的问题。(#30)
  • 解决无效数据目录问题,直接使用 appname 进行配置。(#46)
  • 修正健康 API 中系统集群健康状态的错误报告。(#39)

优化改进

  • 添加框架和依赖库的提交哈希,增强可追溯性。
  • 在应用初始化时自动去除输入变量中的多余空格。
  • 初次访问时自动初始化 Badger 数据库。(#27)
  • 在日志信息中添加搜索响应详情,增强诊断能力。(#28)

更多详情请查看以下详细的 Release Notes 或联系我们的技术支持团队!

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

下载地址: https://infinilabs.cn/download

邮件hello@infini.ltd

电话(+86) 400-139-9200

Discordhttps://discord.gg/4tKTMkkvVX

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

关于极限科技(INFINI Labs)

INFINI Labs

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://infinilabs.cn

收起阅读 »

【搜索客社区日报】第1969期 (2025-01-10)

1、Elasticsearch 近似实时(非实时)搜索的原因分析
https://blog.csdn.net/qq_28727 ... 76941

2、Elasticsearch 性能优化指南:线程池优化详细介绍
https://mp.weixin.qq.com/s/Gjnk01cIUxKKm95aXfEKSg

3、如何使用 Logstash 8 连接 Easysearch
https://mp.weixin.qq.com/s/cA9znJ3sNl1Prq3irLThxA

4、【老杨玩搜索】13. Easysearch 页面-pagination | 从零开始实现页面搜索功能
https://www.bilibili.com/video/BV1G2S4YcE9b/

编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、Elasticsearch 近似实时(非实时)搜索的原因分析
https://blog.csdn.net/qq_28727 ... 76941

2、Elasticsearch 性能优化指南:线程池优化详细介绍
https://mp.weixin.qq.com/s/Gjnk01cIUxKKm95aXfEKSg

3、如何使用 Logstash 8 连接 Easysearch
https://mp.weixin.qq.com/s/cA9znJ3sNl1Prq3irLThxA

4、【老杨玩搜索】13. Easysearch 页面-pagination | 从零开始实现页面搜索功能
https://www.bilibili.com/video/BV1G2S4YcE9b/

编辑:Fred
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第1968期 (2025-01-09)

1.DeepSeek V3 详细解读:模型&Infra 建设
https://mp.weixin.qq.com/s/DKdXcguKcCS5gcwIRLH-Cg
2.一文带你入门 MCP(模型上下文协议)
https://mp.weixin.qq.com/s/rcOi7e8F5qGVVF2noCk46Q
3.2024年度数据库回顾
https://mp.weixin.qq.com/s/jgYDHdCqWDRDfoFkfs7W8Q
4.看完英伟达发布会,玩游戏的和搞AI的都疯了
https://mp.weixin.qq.com/s/wAfeqAgN6eSPDKybW0-u_Q

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.DeepSeek V3 详细解读:模型&Infra 建设
https://mp.weixin.qq.com/s/DKdXcguKcCS5gcwIRLH-Cg
2.一文带你入门 MCP(模型上下文协议)
https://mp.weixin.qq.com/s/rcOi7e8F5qGVVF2noCk46Q
3.2024年度数据库回顾
https://mp.weixin.qq.com/s/jgYDHdCqWDRDfoFkfs7W8Q
4.看完英伟达发布会,玩游戏的和搞AI的都疯了
https://mp.weixin.qq.com/s/wAfeqAgN6eSPDKybW0-u_Q

编辑:Se7en
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第1967期 (2025-01-08)

1.外行如何速成专家?Embedding之BM25、splade稀疏向量解读
https://mp.weixin.qq.com/s/hRTqMsX_eonRAqWVMwAU-w
2.RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
https://mp.weixin.qq.com/s/Dsr4PkxcjoIfaPaWNrqJ7w
3.为RAG pipeline选择最佳的embedding模型
https://mp.weixin.qq.com/s/4h9duWccjOvCys8o2jq1GQ
4.日志审计系统到底是什么东东
https://mp.weixin.qq.com/s/Va8SZaaVMkBRh-RzSUPUlw


编辑:kin122 
更多资讯:http://news.searchkit.cn
继续阅读 »
1.外行如何速成专家?Embedding之BM25、splade稀疏向量解读
https://mp.weixin.qq.com/s/hRTqMsX_eonRAqWVMwAU-w
2.RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
https://mp.weixin.qq.com/s/Dsr4PkxcjoIfaPaWNrqJ7w
3.为RAG pipeline选择最佳的embedding模型
https://mp.weixin.qq.com/s/4h9duWccjOvCys8o2jq1GQ
4.日志审计系统到底是什么东东
https://mp.weixin.qq.com/s/Va8SZaaVMkBRh-RzSUPUlw


编辑:kin122 
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第1966期 (2024-01-07)


1. 有没想过用ES搞个天气预报牌啊?(需要梯子)
https://medium.com/%40rahul.fi ... c2698
1. 够浪日志专家是你吗?(需要梯子)
https://godfreyowidi.medium.co ... e9b54
1. 地理信息可视化你会不会(需要梯子)
https://medium.com/%40truongho ... 677eb
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »

1. 有没想过用ES搞个天气预报牌啊?(需要梯子)
https://medium.com/%40rahul.fi ... c2698
1. 够浪日志专家是你吗?(需要梯子)
https://godfreyowidi.medium.co ... e9b54
1. 地理信息可视化你会不会(需要梯子)
https://medium.com/%40truongho ... 677eb
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
  收起阅读 »

【搜索客社区日报】第1965期 (2025-01-06)

1、极限网关案例分享(1):使用极限网关代替 Nginx 访问 ECE
https://infinilabs.cn/blog/202 ... ng-1/

2、Elasticsearch实战教程:如何使用集群索引数据来进行统计多个数据?
https://blog.csdn.net/qq_57761 ... 92484

3、Elasticsearch中的三种分页策略深度解析:原理、使用及对比
https://blog.csdn.net/qq_26664 ... 98228

4、探索 INFINI Console:提升 Elasticsearch 管理效率的新利器
https://mp.weixin.qq.com/s/bMAwMlRXJjuYSf9fV4MnsQ

5、2025 年,AI Agent 将如何变革?
https://mp.weixin.qq.com/s/c5eVtFdO4A2mr9Eqluk4VQ

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、极限网关案例分享(1):使用极限网关代替 Nginx 访问 ECE
https://infinilabs.cn/blog/202 ... ng-1/

2、Elasticsearch实战教程:如何使用集群索引数据来进行统计多个数据?
https://blog.csdn.net/qq_57761 ... 92484

3、Elasticsearch中的三种分页策略深度解析:原理、使用及对比
https://blog.csdn.net/qq_26664 ... 98228

4、探索 INFINI Console:提升 Elasticsearch 管理效率的新利器
https://mp.weixin.qq.com/s/bMAwMlRXJjuYSf9fV4MnsQ

5、2025 年,AI Agent 将如何变革?
https://mp.weixin.qq.com/s/c5eVtFdO4A2mr9Eqluk4VQ

编辑:Muse
更多资讯:http://news.searchkit.cn 收起阅读 »

招聘 Elasticsearch 开发工程师 - Base 北京 - 极限科技(INFINI Labs)

「新岁启程,与君同行」极限科技诚招 Elasticsearch 开发工程师!

欢迎搜索技术热爱者加入我们,共同打造高效、智能的搜索解决方案!

如果你还不了解 极限科技(INFINI Labs) 是谁,在做什么,需要什么样的小伙伴,那么请看下文:

我们是谁

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://infinilabs.cn

我们在做什么

极限科技(INFINI Labs)正在致力于以下几个核心方向:

1、开发近实时搜索引擎 INFINI Easysearch
INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。详情参见:https://infinilabs.cn

2、打造下一代实时搜索引擎 INFINI Pizza
INFINI Pizza 是一个分布式混合搜索数据库系统。我们的使命是充分利用现代硬件和人工智能的潜力,为企业提供量身定制的实时智能搜索体验。我们致力于满足具有挑战性的环境中高并发和高吞吐量的需求,同时提供无缝高效的搜索功能。详情参见:https://pizza.rs

3、打造 Coco AI — 搜索、连接、协作
Coco AI 是一个人工智能驱动的统一的搜索平台,将您的所有企业应用程序和数据(如 Google Workspace、Dropbox、Confluent Wiki、GitHub 等)整合到一个强大而简洁的搜索界面中。本项目包含适用于桌面和移动端的 COCO 应用,用户可以通过该应用在不同平台上搜索并与企业数据互动。详情参见:https://coco.rs

4、积极参与全球开源生态建设
通过开源 Coco AI、Console、Gateway、Agent、Loadgen 等搜索领域产品和社区贡献,推动全球开源技术的发展,提升中国在全球开源领域的影响力。INFINI Labs Github 主页:https://github.com/infinilabs

5、提供专业服务
为客户提供包括搜索技术支持、迁移服务、定制解决方案和培训在内的全方位服务。

6、提供国产化搜索解决方案
针对中国市场的特殊需求,提供符合国产化标准的搜索产品和解决方案,帮助客户解决使用 Elasticsearch 时遇到的挑战。

极限科技(INFINI Labs)通过这些努力,旨在成为全球领先的实时搜索和数据分析解决方案提供商。

在招岗位介绍

岗位名称

Elasticsearch 开发工程师

岗位职责

  1. 维护和开发基于 Elasticsearch 的搜索业务代码,优化搜索功能,提升用户体验;
  2. 深入研究 Elasticsearch 和 Lucene 内核,定制优化底层功能以满足业务需求;
  3. 优化索引策略、查询性能和存储效率,提升系统扩展性与稳定性;
  4. 负责搜索集群的配置、监控和维护,确保高可用性与安全性;
  5. 编写技术文档,与团队协作解决复杂问题,支持业务需求落地。

岗位要求

  1. 计算机相关专业,本科及以上学历,3 年以上 Elasticsearch 开发经验;
  2. 熟悉 Elasticsearch 和 Lucene 核心模块,掌握 Java 后端语言;
  3. 深入研究过 ES 或者 Lucene 代码,能基于 ES 开发插件;
  4. 深入理解全文检索原理、索引优化与查询性能调优;
  5. 有分布式系统开发经验,能够诊断并解决性能瓶颈;
  6. 有 Elasticsearch 二次开发或插件开发经验;
  7. 善于分析和解决问题,具备良好的沟通与协作能力;
  8. 北京全职,接受出差或客户现场驻场开发。

加分项

  1. 有自己的博客、Github、顶级开源项目贡献者优先;
  2. 有 Lucene 或者 Elasticsearch 源码 Commit 贡献优先;
  3. 有 Elastic Certified Engineer 认证优先;
  4. 有较强的学习能力,愿意致力于新技术的研究。

简历投递

  1. 邮件:hello@infini.ltd(邮件标题请备注姓名+求职岗位)
  2. 微信:INFINI-Labs (加微请备注求职岗位)

我们期待有才华、有激情的你加入我们,一起探索数据搜索的未来,共同创造无限可能!

继续阅读 »

「新岁启程,与君同行」极限科技诚招 Elasticsearch 开发工程师!

欢迎搜索技术热爱者加入我们,共同打造高效、智能的搜索解决方案!

如果你还不了解 极限科技(INFINI Labs) 是谁,在做什么,需要什么样的小伙伴,那么请看下文:

我们是谁

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://infinilabs.cn

我们在做什么

极限科技(INFINI Labs)正在致力于以下几个核心方向:

1、开发近实时搜索引擎 INFINI Easysearch
INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。详情参见:https://infinilabs.cn

2、打造下一代实时搜索引擎 INFINI Pizza
INFINI Pizza 是一个分布式混合搜索数据库系统。我们的使命是充分利用现代硬件和人工智能的潜力,为企业提供量身定制的实时智能搜索体验。我们致力于满足具有挑战性的环境中高并发和高吞吐量的需求,同时提供无缝高效的搜索功能。详情参见:https://pizza.rs

3、打造 Coco AI — 搜索、连接、协作
Coco AI 是一个人工智能驱动的统一的搜索平台,将您的所有企业应用程序和数据(如 Google Workspace、Dropbox、Confluent Wiki、GitHub 等)整合到一个强大而简洁的搜索界面中。本项目包含适用于桌面和移动端的 COCO 应用,用户可以通过该应用在不同平台上搜索并与企业数据互动。详情参见:https://coco.rs

4、积极参与全球开源生态建设
通过开源 Coco AI、Console、Gateway、Agent、Loadgen 等搜索领域产品和社区贡献,推动全球开源技术的发展,提升中国在全球开源领域的影响力。INFINI Labs Github 主页:https://github.com/infinilabs

5、提供专业服务
为客户提供包括搜索技术支持、迁移服务、定制解决方案和培训在内的全方位服务。

6、提供国产化搜索解决方案
针对中国市场的特殊需求,提供符合国产化标准的搜索产品和解决方案,帮助客户解决使用 Elasticsearch 时遇到的挑战。

极限科技(INFINI Labs)通过这些努力,旨在成为全球领先的实时搜索和数据分析解决方案提供商。

在招岗位介绍

岗位名称

Elasticsearch 开发工程师

岗位职责

  1. 维护和开发基于 Elasticsearch 的搜索业务代码,优化搜索功能,提升用户体验;
  2. 深入研究 Elasticsearch 和 Lucene 内核,定制优化底层功能以满足业务需求;
  3. 优化索引策略、查询性能和存储效率,提升系统扩展性与稳定性;
  4. 负责搜索集群的配置、监控和维护,确保高可用性与安全性;
  5. 编写技术文档,与团队协作解决复杂问题,支持业务需求落地。

岗位要求

  1. 计算机相关专业,本科及以上学历,3 年以上 Elasticsearch 开发经验;
  2. 熟悉 Elasticsearch 和 Lucene 核心模块,掌握 Java 后端语言;
  3. 深入研究过 ES 或者 Lucene 代码,能基于 ES 开发插件;
  4. 深入理解全文检索原理、索引优化与查询性能调优;
  5. 有分布式系统开发经验,能够诊断并解决性能瓶颈;
  6. 有 Elasticsearch 二次开发或插件开发经验;
  7. 善于分析和解决问题,具备良好的沟通与协作能力;
  8. 北京全职,接受出差或客户现场驻场开发。

加分项

  1. 有自己的博客、Github、顶级开源项目贡献者优先;
  2. 有 Lucene 或者 Elasticsearch 源码 Commit 贡献优先;
  3. 有 Elastic Certified Engineer 认证优先;
  4. 有较强的学习能力,愿意致力于新技术的研究。

简历投递

  1. 邮件:hello@infini.ltd(邮件标题请备注姓名+求职岗位)
  2. 微信:INFINI-Labs (加微请备注求职岗位)

我们期待有才华、有激情的你加入我们,一起探索数据搜索的未来,共同创造无限可能!

收起阅读 »

【搜索客社区日报】第1964期 (2025-01-03)

1、如何使用 Kibana OSS 7.10.2 连接 Easysearch
https://infinilabs.cn/blog/202 ... arch/

2、告别 Kibana:Elasticsearch 桌面客户端的新变革
https://mp.weixin.qq.com/s/xFUGhZ7RiIA5QqQHkoT7GQ

3、Elasticsearch 中副本和分片如何优化?
https://mp.weixin.qq.com/s/29i5dAWyYRfqaWxtt4x1Qg

4、优化混合搜索:在 OpenSearch 中提升搜索相关性的策略与实践
https://opensearch.org/blog/hy ... tion/

编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、如何使用 Kibana OSS 7.10.2 连接 Easysearch
https://infinilabs.cn/blog/202 ... arch/

2、告别 Kibana:Elasticsearch 桌面客户端的新变革
https://mp.weixin.qq.com/s/xFUGhZ7RiIA5QqQHkoT7GQ

3、Elasticsearch 中副本和分片如何优化?
https://mp.weixin.qq.com/s/29i5dAWyYRfqaWxtt4x1Qg

4、优化混合搜索:在 OpenSearch 中提升搜索相关性的策略与实践
https://opensearch.org/blog/hy ... tion/

编辑:Fred
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第1963期 (2024-12-31)


1. 在SpringBoot里用注解生成ES index(需要梯子)
https://serdaralkancode.medium ... 807a8
2. ES 里的数据摄取管道(需要梯子)
https://medium.com/%40imadsadd ... c97ae
3. Docker 里的ES和kibana的安全设置(需要梯子)
https://umasrinivask.medium.co ... cb3fd
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »

1. 在SpringBoot里用注解生成ES index(需要梯子)
https://serdaralkancode.medium ... 807a8
2. ES 里的数据摄取管道(需要梯子)
https://medium.com/%40imadsadd ... c97ae
3. Docker 里的ES和kibana的安全设置(需要梯子)
https://umasrinivask.medium.co ... cb3fd
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
  收起阅读 »

从 Elastic 迁移到 Easysearch 指引

从 Elasticsearch 迁移到 Easysearch 需要考虑多个方面,这取决于当前使用的 Elasticsearch 版本、能容忍的停机时间、应用需求等。在此背景下,我们梳理了一下通用的升级指引,方便大家进行迁移工作。

迁移路径

Elasticsearch 版本 快照兼容 推荐升级方法
5.x 使用 INFINI Console 迁移
6.x 快照恢复迁移
7.0.0 - 7.10.2 快照恢复迁移
>7.11.0 使用 INFINI Console 迁移

之前有同事做过相关测试,详情请移步这里

快照恢复迁移

  1. 部署新的 Easysearch 集群,如果有使用插件(如 IK),也一并安装。
  2. 将备份仓库注册到 Easysearch 集群。
  3. 在 Easysearch 中设置需要使用的用户名和密码信息。
  4. 原 Elasticsearch 集群进行快照备份。
  5. 在 Easysearch 集群中进行备份还原。
  6. 另部署一套应用连接 Easysearch 集群,进行数据、功能验证。
  7. 停止应用写入新的数据到 Elasticsearch。
  8. 原 Elasticsearch 集群进行快照备份。
  9. 在 Easysearch 集群中进行备份还原。
  10. 再次使用应用验证数据、功能正常。
  11. 切换,老应用下线使用新应用或者老应用修改地址连接 Easysearch 集群。

INFINI Console 迁移

  1. 部署新的 Easysearch 集群及其插件(如 IK)。
  2. 部署 INFINI Console、Gateway 程序。
  3. 将 Elasticsearch 和 Easysearch 注册到 INFINI Console 中。
  4. 在 Easysearch 中设置需要使用的用户名和密码信息。
  5. 建立数据迁移任务,对业务索引进行迁移,建议启用压缩功能。
  6. 另部署一套应用连接 Easysearch 集群,进行数据、功能验证。
  7. 停止应用写入新的数据到 Elasticsearch。
  8. 再次建立数据迁移任务,设置条件,只迁移增量数据。
  9. 再次使用应用验证数据、功能正常。
  10. 切换,老应用下线使用新应用或者老应用修改地址连接 Easysearch 集群。

客户端调整

如果要继续使用 Java High Level REST Client,建议将版本调整到 7.10.2 。当然更建议的是使用 Easysearch 的客户端,更轻更快,构建查询,跟搭积木一样简单。

开源事业

极限科技(INFINI Labs) 一直致力于为开发者和企业提供优质的开源工具,提升整个技术生态的活力。除了维护国内最流行的分词器 analysis-ik 和 analysis-pinyin ,也在不断推动更多高质量开源产品的诞生。

在极限科技成立三周年之际,公司宣布以下产品和工具已全面开源:

以上开源软件都可以在 Github 上面找到:https://github.com/infinilabs

欢迎大家一起参与到开源工具的维护、贡献当中来,别忘了 Star🌟 支持一下!!!

如果您对迁移过程有任何疑问,欢迎与我讨论。

继续阅读 »

从 Elasticsearch 迁移到 Easysearch 需要考虑多个方面,这取决于当前使用的 Elasticsearch 版本、能容忍的停机时间、应用需求等。在此背景下,我们梳理了一下通用的升级指引,方便大家进行迁移工作。

迁移路径

Elasticsearch 版本 快照兼容 推荐升级方法
5.x 使用 INFINI Console 迁移
6.x 快照恢复迁移
7.0.0 - 7.10.2 快照恢复迁移
>7.11.0 使用 INFINI Console 迁移

之前有同事做过相关测试,详情请移步这里

快照恢复迁移

  1. 部署新的 Easysearch 集群,如果有使用插件(如 IK),也一并安装。
  2. 将备份仓库注册到 Easysearch 集群。
  3. 在 Easysearch 中设置需要使用的用户名和密码信息。
  4. 原 Elasticsearch 集群进行快照备份。
  5. 在 Easysearch 集群中进行备份还原。
  6. 另部署一套应用连接 Easysearch 集群,进行数据、功能验证。
  7. 停止应用写入新的数据到 Elasticsearch。
  8. 原 Elasticsearch 集群进行快照备份。
  9. 在 Easysearch 集群中进行备份还原。
  10. 再次使用应用验证数据、功能正常。
  11. 切换,老应用下线使用新应用或者老应用修改地址连接 Easysearch 集群。

INFINI Console 迁移

  1. 部署新的 Easysearch 集群及其插件(如 IK)。
  2. 部署 INFINI Console、Gateway 程序。
  3. 将 Elasticsearch 和 Easysearch 注册到 INFINI Console 中。
  4. 在 Easysearch 中设置需要使用的用户名和密码信息。
  5. 建立数据迁移任务,对业务索引进行迁移,建议启用压缩功能。
  6. 另部署一套应用连接 Easysearch 集群,进行数据、功能验证。
  7. 停止应用写入新的数据到 Elasticsearch。
  8. 再次建立数据迁移任务,设置条件,只迁移增量数据。
  9. 再次使用应用验证数据、功能正常。
  10. 切换,老应用下线使用新应用或者老应用修改地址连接 Easysearch 集群。

客户端调整

如果要继续使用 Java High Level REST Client,建议将版本调整到 7.10.2 。当然更建议的是使用 Easysearch 的客户端,更轻更快,构建查询,跟搭积木一样简单。

开源事业

极限科技(INFINI Labs) 一直致力于为开发者和企业提供优质的开源工具,提升整个技术生态的活力。除了维护国内最流行的分词器 analysis-ik 和 analysis-pinyin ,也在不断推动更多高质量开源产品的诞生。

在极限科技成立三周年之际,公司宣布以下产品和工具已全面开源:

以上开源软件都可以在 Github 上面找到:https://github.com/infinilabs

欢迎大家一起参与到开源工具的维护、贡献当中来,别忘了 Star🌟 支持一下!!!

如果您对迁移过程有任何疑问,欢迎与我讨论。

收起阅读 »

Easysearch 可搜索快照功能,看这篇就够了

可搜索快照功能改变了我们对备份数据的查询方式。以往要查询备份数据时,要先找到备份数据所在的快照,然后在一个合适的环境中恢复快照,最后再发起请求查询数据。这个处理路径很长,而且很消耗时间。可搜索快照功能将大大简化该处理路径,节约时间。

角色设置

相信你对节点角色的概念已经有所熟悉。要启用可搜索快照功能,Easysearch 集群中必须至少有一个节点拥有 search 角色。参考设置如下。

node.roles: ["search"]
node.search.cache.size: 500mb
  • node.roles: 指定节点角色,只有 search 角色的节点才能去搜索快照中的数据。
  • node.search.cache.size: 执行快照搜索时,数据缓存大小。

混合角色设置,参考如下。

node.roles: ["master","data","search","ingest"]
node.search.cache.size: 500mb

创建快照

可搜索快照功能使用普通快照作为基础,创建快照命令不变。比如我创建且备份个 infini 索引。

# 创建 infini 索引
POST infini/_doc
{
  "test":"Searchable snapshots"
}

# 创建快照备份 infini 索引
PUT _snapshot/my-fs-repository/1
{
  "indices": "infini",
  "include_global_state": false
}

创建快照索引

可搜索快照功能的核心是搜索快照中的索引,这一步是通过快照索引实现的。为了和集群中的普通索引区别开来,我们将实际存储在快照中的索引称为快照索引。通过使用 Easysearch 的 _restore API 并指定 remote_snapshot 存储类型来创建快照索引。

创建快照索引时,注意名称不能与当前索引名称重复。通常我们备份完索引后,可删除索引释放节点磁盘空间,创建快照索引时默认使用原来的名称。

# 删除 infini 索引释放磁盘空间
DELETE infini

# 创建快照索引,使用原索引名称
POST /_snapshot/my-fs-repository/1/_restore
{
  "indices": "infini",
  "include_global_state": false,
  "include_aliases": false,
  "storage_type": "remote_snapshot"
}

创建快照索引的命令和还原快照的命令非常相似,关键在于 storage_type 参数指定 remote_snapshot 存储类型。

如果要将快照中的全部索引都创建快照索引,可省略 indices 参数。

如果想在创建快照索引时指定不同的名字,参考下面的命令。

POST /_snapshot/my-fs-repository/1/_restore
{
  "indices": "infini",
  "include_global_state": false,
  "include_aliases": false,
  "storage_type": "remote_snapshot",
  "rename_pattern": "(infini)",
  "rename_replacement": "snapshot-$1"
}
  • rename_pattern: 使用此选项指定索引匹配的正则表达式。使用捕获组重用索引名称的部分。
  • rename_replacement: 使用 $0 包括整个匹配索引名称,使用 $1 包括第一个捕获组的内容,等等。

上述命令创建出来的快照索引名称是 snapshot-infini 。

经过上面一系列的操作,我已经拥有了两个快照索引。

搜索快照索引

我们通过搜索快照索引达到搜索快照数据的目的,令人开心的是搜索快照索引和搜索普通索引的语法完全一样。😀

常见问题

如何区分普通索引和快照索引呢?

我们可以通过索引的 settings 信息区分,快照索引的 settings 信息中有 store.type: remote_snapshot 信息,普通索引没有此信息。

快照索引能写入数据吗?

快照索引无法写入,数据仍然保持在快照格式中存储在存储库中,因此可搜索快照索引本质上是只读的。 任何尝试写入可搜索快照索引的操作都会导致错误。

快照索引不想要了怎么办?

直接删除,需要时再执行创建快照索引流程。此外快照在创建快照索引后,无法直接删除快照,要先删除快照索引。

如果您对上述内容有任何疑问,欢迎与我讨论。

继续阅读 »

可搜索快照功能改变了我们对备份数据的查询方式。以往要查询备份数据时,要先找到备份数据所在的快照,然后在一个合适的环境中恢复快照,最后再发起请求查询数据。这个处理路径很长,而且很消耗时间。可搜索快照功能将大大简化该处理路径,节约时间。

角色设置

相信你对节点角色的概念已经有所熟悉。要启用可搜索快照功能,Easysearch 集群中必须至少有一个节点拥有 search 角色。参考设置如下。

node.roles: ["search"]
node.search.cache.size: 500mb
  • node.roles: 指定节点角色,只有 search 角色的节点才能去搜索快照中的数据。
  • node.search.cache.size: 执行快照搜索时,数据缓存大小。

混合角色设置,参考如下。

node.roles: ["master","data","search","ingest"]
node.search.cache.size: 500mb

创建快照

可搜索快照功能使用普通快照作为基础,创建快照命令不变。比如我创建且备份个 infini 索引。

# 创建 infini 索引
POST infini/_doc
{
  "test":"Searchable snapshots"
}

# 创建快照备份 infini 索引
PUT _snapshot/my-fs-repository/1
{
  "indices": "infini",
  "include_global_state": false
}

创建快照索引

可搜索快照功能的核心是搜索快照中的索引,这一步是通过快照索引实现的。为了和集群中的普通索引区别开来,我们将实际存储在快照中的索引称为快照索引。通过使用 Easysearch 的 _restore API 并指定 remote_snapshot 存储类型来创建快照索引。

创建快照索引时,注意名称不能与当前索引名称重复。通常我们备份完索引后,可删除索引释放节点磁盘空间,创建快照索引时默认使用原来的名称。

# 删除 infini 索引释放磁盘空间
DELETE infini

# 创建快照索引,使用原索引名称
POST /_snapshot/my-fs-repository/1/_restore
{
  "indices": "infini",
  "include_global_state": false,
  "include_aliases": false,
  "storage_type": "remote_snapshot"
}

创建快照索引的命令和还原快照的命令非常相似,关键在于 storage_type 参数指定 remote_snapshot 存储类型。

如果要将快照中的全部索引都创建快照索引,可省略 indices 参数。

如果想在创建快照索引时指定不同的名字,参考下面的命令。

POST /_snapshot/my-fs-repository/1/_restore
{
  "indices": "infini",
  "include_global_state": false,
  "include_aliases": false,
  "storage_type": "remote_snapshot",
  "rename_pattern": "(infini)",
  "rename_replacement": "snapshot-$1"
}
  • rename_pattern: 使用此选项指定索引匹配的正则表达式。使用捕获组重用索引名称的部分。
  • rename_replacement: 使用 $0 包括整个匹配索引名称,使用 $1 包括第一个捕获组的内容,等等。

上述命令创建出来的快照索引名称是 snapshot-infini 。

经过上面一系列的操作,我已经拥有了两个快照索引。

搜索快照索引

我们通过搜索快照索引达到搜索快照数据的目的,令人开心的是搜索快照索引和搜索普通索引的语法完全一样。😀

常见问题

如何区分普通索引和快照索引呢?

我们可以通过索引的 settings 信息区分,快照索引的 settings 信息中有 store.type: remote_snapshot 信息,普通索引没有此信息。

快照索引能写入数据吗?

快照索引无法写入,数据仍然保持在快照格式中存储在存储库中,因此可搜索快照索引本质上是只读的。 任何尝试写入可搜索快照索引的操作都会导致错误。

快照索引不想要了怎么办?

直接删除,需要时再执行创建快照索引流程。此外快照在创建快照索引后,无法直接删除快照,要先删除快照索引。

如果您对上述内容有任何疑问,欢迎与我讨论。

收起阅读 »

【搜索客社区日报】第1962期 (2024-12-30)

1、Easysearch 可搜索快照功能,看这篇就够了
https://infinilabs.cn/blog/202 ... icle/

2、Spring Boot 集成 Easysearch 完整指南
https://infinilabs.cn/blog/202 ... tion/

3、DeepSeek-V3 是怎么训练的|深度拆解
https://mp.weixin.qq.com/s/2M_f2ow3rfarr-vLeKbVCA

4、一文讲透 AI Agent 与 AI Workflow 的区别和深度解析:从自动化到智能化的演进
https://mp.weixin.qq.com/s/GCifbH9wGdPysu1z-n3KDA

5、从ES的JVM配置起步思考JVM常见参数优化
https://blog.csdn.net/xiaofeng ... 39510

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、Easysearch 可搜索快照功能,看这篇就够了
https://infinilabs.cn/blog/202 ... icle/

2、Spring Boot 集成 Easysearch 完整指南
https://infinilabs.cn/blog/202 ... tion/

3、DeepSeek-V3 是怎么训练的|深度拆解
https://mp.weixin.qq.com/s/2M_f2ow3rfarr-vLeKbVCA

4、一文讲透 AI Agent 与 AI Workflow 的区别和深度解析:从自动化到智能化的演进
https://mp.weixin.qq.com/s/GCifbH9wGdPysu1z-n3KDA

5、从ES的JVM配置起步思考JVM常见参数优化
https://blog.csdn.net/xiaofeng ... 39510

编辑:Muse
更多资讯:http://news.searchkit.cn 收起阅读 »

Spring Boot 集成 Easysearch 完整指南

Easysearch 的很多用户都有这样的需要,之前是用的 ES,现在要迁移到 Easysearch,但是业务方使用的是 Spring Boot 集成的客户端,问是否能平滑迁移。

Easysearch 是完全兼容 Spring Boot 的,完全不用修改,本指南将探讨如何将 Spring Boot 和 ES 的 high-level 客户端 与 Easysearch 进行集成,涵盖从基础设置到实现 CRUD 操作和测试的所有内容。

服务器设置

首先,需要修改 Easysearch 节点的 easysearch.yml 文件,打开并配置这 2 个配置项:

elasticsearch.api_compatibility: true

#根据客户端版本配置版本号,我这里配置成 7.17.18
elasticsearch.api_compatibility_version: "7.17.18"

项目设置

然后,让我们设置 Maven 依赖。以下是 pom.xml 中的基本配置:

<properties>
    <java.version>11</java.version>
    <spring-data-elasticsearch.version>4.4.18</spring-data-elasticsearch.version>
    <elasticsearch.version>7.17.18</elasticsearch.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>${spring-data-elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

客户端连接配置

完全和连接 Elasticsearch 的方式一样,不用修改:

配置 src/main/resources/application.yml 文件

spring:
  elasticsearch:
    rest:
      uris: https://localhost:9202
      username: admin
      password: xxxxxxxxxxx
    ssl:
      verification-mode: none

连接配置类

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    @Value("${spring.elasticsearch.rest.uris}")
    private String elasticsearchUrl;

    @Value("${spring.elasticsearch.rest.username}")
    private String username;

    @Value("${spring.elasticsearch.rest.password}")
    private String password;

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));

        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(null, (x509Certificates, s) -> true)
                .build();

        RestClientBuilder builder = RestClient.builder(HttpHost.create(elasticsearchUrl))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                        .setDefaultCredentialsProvider(credentialsProvider)
                        .setSSLContext(sslContext)
                        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE));

        return new RestHighLevelClient(builder);
    }
}

领域模型

使用 Spring 的 Elasticsearch 注解定义领域模型:

@Data
@Document(indexName = "products")
public class Product {
    @Id
    private String id;

    @Field(type = FieldType.Text, name = "name")
    private String name;

    @Field(type = FieldType.Double, name = "price")
    private Double price;
}

仓库层

创建继承 ElasticsearchRepository 的仓库接口:

@Repository
@EnableElasticsearchRepositories
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
}

服务层

实现服务层来处理业务逻辑:

@Service
public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public Product findProductById(String id) {
        return productRepository.findById(id).orElse(null);
    }
}

测试

编写集成测试类:

@SpringBootTest
public class ProductServiceIntegrationTest {
    @Autowired
    private ElasticsearchOperations elasticsearchOperations;

    @Autowired
    private ProductService productService;

    private static final String INDEX_NAME = "products";

    @BeforeEach
    public void setUp() {
        IndexOperations indexOperations = elasticsearchOperations.indexOps(IndexCoordinates.of(INDEX_NAME));
        if (indexOperations.exists()) {
            indexOperations.delete();
        }

        // 定义 mapping
        Document mapping = Document.create()
                .append("properties", Document.create()
                        .append("name", Document.create()
                                .append("type", "text")
                                .append("analyzer", "standard"))
                        .append("price", Document.create()
                                .append("type", "double")));

        // 创建索引并应用 mapping
        indexOperations.create(Collections.EMPTY_MAP, mapping);
    }

    @Test
    public void testSaveAndFindProduct() {
         List<Product> products = Arrays.asList(
                new Product("Test Product 1", 99.99),
                new Product("Test Product 2", 199.99),
                new Product("Test Product 3", 299.99)
        );

        List<IndexQuery> queries = products.stream()
            .map(product -> new IndexQueryBuilder()
                .withObject(product)
                .withIndex(INDEX_NAME)
                .build())
            .collect(Collectors.toList());

        List<IndexedObjectInformation> indexedInfos = elasticsearchOperations.bulkIndex(
            queries,
            IndexCoordinates.of(INDEX_NAME)
        );

        // 验证结果
        List<String> ids = indexedInfos.stream()
            .map(IndexedObjectInformation::getId)
            .collect(Collectors.toList());

        assertFalse(ids.isEmpty());
        assertEquals(products.size(), ids.size());
    }
}

结论

本指南展示了 Easysearch 与 Elasticsearch 的高度兼容性:

  1. 配置方式相同,仅需启用 Easysearch 的 API 兼容模式。
  2. 可直接使用现有 Elasticsearch 客户端。
  3. Maven 依赖无需更改。
  4. API、注解和仓库接口完全兼容。
  5. 现有测试代码可直接应用。

这种兼容性使得从 Elasticsearch 迁移到 Easysearch 成为一个简单、低风险的过程。Spring Boot 项目可以几乎无缝地切换到 Easysearch,同时获得其性能和资源利用方面的优势。

关于 Easysearch

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

官网文档:https://infinilabs.cn/docs/latest/easysearch

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
原文:https://infinilabs.cn/blog/2024/use-spring-boot-for-easysearch-connection/

继续阅读 »

Easysearch 的很多用户都有这样的需要,之前是用的 ES,现在要迁移到 Easysearch,但是业务方使用的是 Spring Boot 集成的客户端,问是否能平滑迁移。

Easysearch 是完全兼容 Spring Boot 的,完全不用修改,本指南将探讨如何将 Spring Boot 和 ES 的 high-level 客户端 与 Easysearch 进行集成,涵盖从基础设置到实现 CRUD 操作和测试的所有内容。

服务器设置

首先,需要修改 Easysearch 节点的 easysearch.yml 文件,打开并配置这 2 个配置项:

elasticsearch.api_compatibility: true

#根据客户端版本配置版本号,我这里配置成 7.17.18
elasticsearch.api_compatibility_version: "7.17.18"

项目设置

然后,让我们设置 Maven 依赖。以下是 pom.xml 中的基本配置:

<properties>
    <java.version>11</java.version>
    <spring-data-elasticsearch.version>4.4.18</spring-data-elasticsearch.version>
    <elasticsearch.version>7.17.18</elasticsearch.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>${spring-data-elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

客户端连接配置

完全和连接 Elasticsearch 的方式一样,不用修改:

配置 src/main/resources/application.yml 文件

spring:
  elasticsearch:
    rest:
      uris: https://localhost:9202
      username: admin
      password: xxxxxxxxxxx
    ssl:
      verification-mode: none

连接配置类

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    @Value("${spring.elasticsearch.rest.uris}")
    private String elasticsearchUrl;

    @Value("${spring.elasticsearch.rest.username}")
    private String username;

    @Value("${spring.elasticsearch.rest.password}")
    private String password;

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));

        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(null, (x509Certificates, s) -> true)
                .build();

        RestClientBuilder builder = RestClient.builder(HttpHost.create(elasticsearchUrl))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                        .setDefaultCredentialsProvider(credentialsProvider)
                        .setSSLContext(sslContext)
                        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE));

        return new RestHighLevelClient(builder);
    }
}

领域模型

使用 Spring 的 Elasticsearch 注解定义领域模型:

@Data
@Document(indexName = "products")
public class Product {
    @Id
    private String id;

    @Field(type = FieldType.Text, name = "name")
    private String name;

    @Field(type = FieldType.Double, name = "price")
    private Double price;
}

仓库层

创建继承 ElasticsearchRepository 的仓库接口:

@Repository
@EnableElasticsearchRepositories
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
}

服务层

实现服务层来处理业务逻辑:

@Service
public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public Product findProductById(String id) {
        return productRepository.findById(id).orElse(null);
    }
}

测试

编写集成测试类:

@SpringBootTest
public class ProductServiceIntegrationTest {
    @Autowired
    private ElasticsearchOperations elasticsearchOperations;

    @Autowired
    private ProductService productService;

    private static final String INDEX_NAME = "products";

    @BeforeEach
    public void setUp() {
        IndexOperations indexOperations = elasticsearchOperations.indexOps(IndexCoordinates.of(INDEX_NAME));
        if (indexOperations.exists()) {
            indexOperations.delete();
        }

        // 定义 mapping
        Document mapping = Document.create()
                .append("properties", Document.create()
                        .append("name", Document.create()
                                .append("type", "text")
                                .append("analyzer", "standard"))
                        .append("price", Document.create()
                                .append("type", "double")));

        // 创建索引并应用 mapping
        indexOperations.create(Collections.EMPTY_MAP, mapping);
    }

    @Test
    public void testSaveAndFindProduct() {
         List<Product> products = Arrays.asList(
                new Product("Test Product 1", 99.99),
                new Product("Test Product 2", 199.99),
                new Product("Test Product 3", 299.99)
        );

        List<IndexQuery> queries = products.stream()
            .map(product -> new IndexQueryBuilder()
                .withObject(product)
                .withIndex(INDEX_NAME)
                .build())
            .collect(Collectors.toList());

        List<IndexedObjectInformation> indexedInfos = elasticsearchOperations.bulkIndex(
            queries,
            IndexCoordinates.of(INDEX_NAME)
        );

        // 验证结果
        List<String> ids = indexedInfos.stream()
            .map(IndexedObjectInformation::getId)
            .collect(Collectors.toList());

        assertFalse(ids.isEmpty());
        assertEquals(products.size(), ids.size());
    }
}

结论

本指南展示了 Easysearch 与 Elasticsearch 的高度兼容性:

  1. 配置方式相同,仅需启用 Easysearch 的 API 兼容模式。
  2. 可直接使用现有 Elasticsearch 客户端。
  3. Maven 依赖无需更改。
  4. API、注解和仓库接口完全兼容。
  5. 现有测试代码可直接应用。

这种兼容性使得从 Elasticsearch 迁移到 Easysearch 成为一个简单、低风险的过程。Spring Boot 项目可以几乎无缝地切换到 Easysearch,同时获得其性能和资源利用方面的优势。

关于 Easysearch

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

官网文档:https://infinilabs.cn/docs/latest/easysearch

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
原文:https://infinilabs.cn/blog/2024/use-spring-boot-for-easysearch-connection/

收起阅读 »

INFINI Labs 产品更新 | Console/Gateway/Agent 等产品开源发布首个版本

release

INFINI Labs 产品又更新啦~,包括 Easysearch v1.9.0、Gateway、Console、Agent、Loadgen v1.27.0。本次各产品更新了很多亮点功能,如 Easysearch 新增 rollup 功能,优化了多版本兼容配置;Console/Gateway/Agent/Loadgen 及 Framework 开源后,发布首个重大更新版本,支持过期元数据删除,指标图表懒加载,指标采集协程优化等等,欢迎大家下载体验。

INFINI Easysearch v1.9.0

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。详情见:https://infinilabs.cn

Easysearch 本次更新如下:

Improvements

  • 发布 rollup 功能

    • 支持自动对 rollup 索引进行滚动,无需外部触发
    • 支持 avg sum max min value_count percentiles 指标类型的聚合
    • 支持 terms 聚合
    • 支持对指标聚合进行 Pipeline 聚合
    • 支持聚合前先对数据进行过滤
    • 进行聚合查询时支持直接搜索原始索引,不用更改搜索代码
  • 增加适配 logstash 8.x 的请求 header
  • _cat/templates 增加 lifecycle 和 rollover 列的展示

Bug fix

  • 修复 rest-api template 测试错误

INFINI Console v1.27.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。开源地址:https://github.com/infinilabs/console

Console 在线体验: http://demo.infini.cloud (用户名/密码:readonly/readonly)。

Console 本次更新如下:

Improvements

  • 代码开源,统一采用 Github 仓库进行开发
  • 指标采集优化,由原来的单一协程采集调整为每个注册的集群有单独的协程进行采集
  • 指标监控页面图表展示采用懒加载、单个图表独立加载,增强用户体验
  • 通用时间控件增加超时时间设置
  • 集群选择控件增加注册、刷新功能
  • 提供指标采集状态
  • 表格控件排版优化

Bug fix

  • 修复集群元数据更新不及时问题
  • 修复帮助文档等链接不正确问题
  • 修复节点、索引数据因随机 id 出现重复记录问题
  • 修复 Runtime、Agent 实例编辑页面出错问题
  • 修复集群、节点、索引、分片元数据无 Loading 问题
  • 修复索引健康状态指标采集失败问题
  • 修复个别菜单列未国际化问题

INFINI Gateway v1.27.0

INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。开源地址:https://github.com/infinilabs/gateway

Gateway 本次更新如下:

Improvements

  • 调整队列消费者 slice 默认配置为 1

Bug fix

  • 修复缓存数据丢失导致队列无法消费问题
  • 同步更新 Framework 修复的一些已知问题

INFINI Agent v1.27.0

INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。开源地址:https://github.com/infinilabs/agent

探针 Agent 本次更新如下:

Improvements

  • 与 INFINI Console 统一版本号
  • 同步更新 Framework 修复的已知问题
  • 支持 K8S 环境指标采集

INFINI Loadgen v1.27.0

INFINI Loadgen 是一款轻量、无依赖的 Eaysearch/Elasticsearch/OpenSearch 性能压测工具,支持参数模板化配置,支持压测端均衡流量控制,可以模拟高并发请求。开源地址:https://github.com/infinilabs/loadgen

Loadgen 本次更新如下:

Improvements

  • 保持与 Console 相同版本
  • 同步更新 Framework 修复的已知问题

Bug fix

  • 修复 API 接口测试逻辑异常问题

INFINI Framework

INFINI Framework 是 INFINI Labs 各产品依赖的核心公共代码库。开源地址:https://github.com/infinilabs/framework

Improvements

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

下载地址: https://infinilabs.cn/download

邮件hello@infini.ltd

电话(+86) 400-139-9200

Discordhttps://discord.gg/4tKTMkkvVX

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

关于极限科技(INFINI Labs)

INFINI Labs

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://infinilabs.cn

继续阅读 »

release

INFINI Labs 产品又更新啦~,包括 Easysearch v1.9.0、Gateway、Console、Agent、Loadgen v1.27.0。本次各产品更新了很多亮点功能,如 Easysearch 新增 rollup 功能,优化了多版本兼容配置;Console/Gateway/Agent/Loadgen 及 Framework 开源后,发布首个重大更新版本,支持过期元数据删除,指标图表懒加载,指标采集协程优化等等,欢迎大家下载体验。

INFINI Easysearch v1.9.0

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。详情见:https://infinilabs.cn

Easysearch 本次更新如下:

Improvements

  • 发布 rollup 功能

    • 支持自动对 rollup 索引进行滚动,无需外部触发
    • 支持 avg sum max min value_count percentiles 指标类型的聚合
    • 支持 terms 聚合
    • 支持对指标聚合进行 Pipeline 聚合
    • 支持聚合前先对数据进行过滤
    • 进行聚合查询时支持直接搜索原始索引,不用更改搜索代码
  • 增加适配 logstash 8.x 的请求 header
  • _cat/templates 增加 lifecycle 和 rollover 列的展示

Bug fix

  • 修复 rest-api template 测试错误

INFINI Console v1.27.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。开源地址:https://github.com/infinilabs/console

Console 在线体验: http://demo.infini.cloud (用户名/密码:readonly/readonly)。

Console 本次更新如下:

Improvements

  • 代码开源,统一采用 Github 仓库进行开发
  • 指标采集优化,由原来的单一协程采集调整为每个注册的集群有单独的协程进行采集
  • 指标监控页面图表展示采用懒加载、单个图表独立加载,增强用户体验
  • 通用时间控件增加超时时间设置
  • 集群选择控件增加注册、刷新功能
  • 提供指标采集状态
  • 表格控件排版优化

Bug fix

  • 修复集群元数据更新不及时问题
  • 修复帮助文档等链接不正确问题
  • 修复节点、索引数据因随机 id 出现重复记录问题
  • 修复 Runtime、Agent 实例编辑页面出错问题
  • 修复集群、节点、索引、分片元数据无 Loading 问题
  • 修复索引健康状态指标采集失败问题
  • 修复个别菜单列未国际化问题

INFINI Gateway v1.27.0

INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。开源地址:https://github.com/infinilabs/gateway

Gateway 本次更新如下:

Improvements

  • 调整队列消费者 slice 默认配置为 1

Bug fix

  • 修复缓存数据丢失导致队列无法消费问题
  • 同步更新 Framework 修复的一些已知问题

INFINI Agent v1.27.0

INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。开源地址:https://github.com/infinilabs/agent

探针 Agent 本次更新如下:

Improvements

  • 与 INFINI Console 统一版本号
  • 同步更新 Framework 修复的已知问题
  • 支持 K8S 环境指标采集

INFINI Loadgen v1.27.0

INFINI Loadgen 是一款轻量、无依赖的 Eaysearch/Elasticsearch/OpenSearch 性能压测工具,支持参数模板化配置,支持压测端均衡流量控制,可以模拟高并发请求。开源地址:https://github.com/infinilabs/loadgen

Loadgen 本次更新如下:

Improvements

  • 保持与 Console 相同版本
  • 同步更新 Framework 修复的已知问题

Bug fix

  • 修复 API 接口测试逻辑异常问题

INFINI Framework

INFINI Framework 是 INFINI Labs 各产品依赖的核心公共代码库。开源地址:https://github.com/infinilabs/framework

Improvements

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

下载地址: https://infinilabs.cn/download

邮件hello@infini.ltd

电话(+86) 400-139-9200

Discordhttps://discord.gg/4tKTMkkvVX

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

关于极限科技(INFINI Labs)

INFINI Labs

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://infinilabs.cn

收起阅读 »