提问:布和纸怕什么?

【搜索客社区日报】第1989期 (2024-02-20)

1.Hugging Face 最新推出的 Agent 课程
https://huggingface.co/learn/agents-course
2.smolagents 一个构建强大智能体的简洁库
https://github.com/huggingface/smolagents
3.MLSys/LLMSys课程
https://space.bilibili.com/15452596/lists
4.文末赠书 | 经典之作更新,Elasticsearch 创始人推荐的 Elasticsearch 实战宝典
https://mp.weixin.qq.com/s/aOrBgPpxGoV-BDjUM8EvpQ

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.Hugging Face 最新推出的 Agent 课程
https://huggingface.co/learn/agents-course
2.smolagents 一个构建强大智能体的简洁库
https://github.com/huggingface/smolagents
3.MLSys/LLMSys课程
https://space.bilibili.com/15452596/lists
4.文末赠书 | 经典之作更新,Elasticsearch 创始人推荐的 Elasticsearch 实战宝典
https://mp.weixin.qq.com/s/aOrBgPpxGoV-BDjUM8EvpQ

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

【搜索客社区日报】第1988期 (2024-02-19)

1.DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
https://mp.weixin.qq.com/s/U3RYRqNppuEX4oMdgiKu9Q

2.如何在 Elasticsearch 中设置向量搜索 - 第二部分
https://blog.csdn.net/UbuntuTo ... 62747

3.Elasticsearch 混合搜索 - Hybrid Search
https://blog.csdn.net/UbuntuTo ... 97606

4. DeepSeek R1 与 OpenAI O1:怎么为自己的业务挑选合适的 AI?(搭梯)
https://medium.com/%40PedalsUp ... ca3f2


编辑:kin122    
更多资讯:http://news.searchkit.cn
继续阅读 »
1.DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
https://mp.weixin.qq.com/s/U3RYRqNppuEX4oMdgiKu9Q

2.如何在 Elasticsearch 中设置向量搜索 - 第二部分
https://blog.csdn.net/UbuntuTo ... 62747

3.Elasticsearch 混合搜索 - Hybrid Search
https://blog.csdn.net/UbuntuTo ... 97606

4. DeepSeek R1 与 OpenAI O1:怎么为自己的业务挑选合适的 AI?(搭梯)
https://medium.com/%40PedalsUp ... ca3f2


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

【搜索客社区日报】第1987期 (2024-02-18)


1. 奈飞当年是怎么搭数据管线的?(需要梯子)
https://netflixtechblog.com/ev ... 36905
2. 用ELK监控nodejs的日志怎么搞?(需要梯子)
https://medium.com/%40arnabgol ... 3915c
3. 语义搜索 + ES, 1 + 1 远远大于2(需要梯子)
https://usharengaraju.medium.c ... 97135
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »

1. 奈飞当年是怎么搭数据管线的?(需要梯子)
https://netflixtechblog.com/ev ... 36905
2. 用ELK监控nodejs的日志怎么搞?(需要梯子)
https://medium.com/%40arnabgol ... 3915c
3. 语义搜索 + ES, 1 + 1 远远大于2(需要梯子)
https://usharengaraju.medium.c ... 97135
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
  收起阅读 »

INFINI Labs 产品更新 | Coco AI 开启智能知识管理新篇章

release

INFINI Labs 产品更新发布!此次更新,Coco AI 正式亮相,可快速实现智能化的企业或个人知识库管理;Easysearch 增强 Rollup 能力,可自定义 Rollup 索引生命周期,支持更多的聚合方式;Console 完善了 Metrics 的指标监控异常告警能力,支持指标数据变化横向对比;Agent 进行了多处优化以及修复相关 Bug,支持在 Docker 容器中开启探针进行指标采集 等等。欢迎下载体验,探索更多可能!

Coco AI v0.1.0

Coco AI 是一个完全开源、跨平台的统一 AI 搜索与效率工具,能够连接并搜索多种数据源,包括应用程序、文件、谷歌网盘、Notion、语雀、Hugo 等本地与云端数据。通过接入 DeepSeek 等大模型,Coco AI 实现了智能化的企业或个人知识库管理,注重隐私,支持私有部署,帮助用户快速、智能地访问信息。

本次发布的是 Coco AI 第一个预览版本, 支持 MacOS 12 以上的操作系统, 欢迎大家下载使用 ~

项目主页: https://coco.rs/

开源地址:

以下是操作界面截图:

  1. 搜索本地桌面应用程序
  2. 搜索企业或个人的知识库,混合搜索多个数据源
  3. 基于个人的知识库来与 AI 助手聊天
  4. AI 助手完整模式支持历史会话的查看
  5. 支持接入自己搭建的 Coco Server, 私有部署, 隐私安全

INFINI Easysearch v1.10.2

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

Easysearch 本次更新如下:

功能更新

  • lucene 版本更新
    • lucene 版本更新到 8.11.4,是 lucene8.x 系列的最后一个版本
    • jna 更新到 5.12.1
  • IK 分词器: 增强词典配置的灵活性和可扩展性
    • 支持字段级别的词典配置,用户可通过自定义 tokenizer 为不同索引、不同字段配置专用词典
    • 优化词典管理机制
    • 支持自定义词典与 IK 默认词典合并使用
    • 词库数据存储在可配置的索引中,支持实时更新
    • 可使用内置词库索引或自定义词库索引(需保持相同结构)
  • 索引生命周期管理
    • delete action 支持同时基于索引创建时间和文档最新时间戳来执行删除操作

问题修复

  • 修复了 rollup 平均值(avg)聚合计算错误

优化改进

  • 优化 rollup 索引的创建流程

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

INFINI Console v1.28.2

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

Console 在线体验:

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

Console 本次更新如下:

功能更新

  • 告警功能支持根据桶之间文档数差值和内容差异告警
  • 当使用 Easysearch 存储指标时,增加 Rollup 索引生命周期

问题修复

  • 修复 Insight API 处理多时间序列数据时数据丢失的问题

优化改进

  • 告警图表新增复制请求
  • 在已注册的 Agent 管理界面中新增关联凭据设置
  • 在集群编辑中新增采集模式
  • 当使用 Easysearch 存储指标时,自动为系统集群创建 Agent 指标写入最小权限用户
  • 优化 LDAP 用户映射增加默认权限组

INFINI Gateway v1.28.2

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

Gateway 本次更新如下:

功能更新

优化改进

  • 移除 Elasticsearch 过滤器中因模式不匹配导致的不必要节点重新选择(#62)

INFINI Agent v1.28.2

INFINI Agent 负责采集和上传 Elasticsearch, Easysearch, Opensearch 集群的日志和指标信息,通过 INFINI Console 管理,支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

问题修复

  • 添加了日志并优化了一些设置 (#17)
  • 修复了在 Docker 中使用不同用户进程时注册失败的问题 (#11)
  • 同步更新 Framework v1.1.2 修复的一些已知问题

INFINI Loadgen v1.28.2

INFINI Loadgen 是一款开源的专为 Easysearch、Elasticsearch、OpenSearch 设计的轻量级性能测试工具。

Loadgen 本次更新如下:

问题修复

INFINI Framework v1.1.2

INFINI Framework 是 INFINI Labs 基于 Golang 的产品的核心基础,已开源。该框架以开发者为中心设计,简化了构建高性能、可扩展且可靠的应用程序的过程。

Framework 本次更新如下:

问题修复

  • 修复了队列消费者崩溃时 []byte 操作符的问题 (#77)
  • 修复了索引统计信息收集任务中间隔配置不正确的问题 (#80)
  • 修复了重载文件需要使用先前位置的问题 (#79)
  • 通过将集群健康默认状态初始化为绿色来修复空指针崩溃 (#81)

优化改进

  • 重构环回地址以使用常量 (#73)
  • 为队列消费者添加调试消息 (#77)

更多详情请查看以下详细的 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 产品更新发布!此次更新,Coco AI 正式亮相,可快速实现智能化的企业或个人知识库管理;Easysearch 增强 Rollup 能力,可自定义 Rollup 索引生命周期,支持更多的聚合方式;Console 完善了 Metrics 的指标监控异常告警能力,支持指标数据变化横向对比;Agent 进行了多处优化以及修复相关 Bug,支持在 Docker 容器中开启探针进行指标采集 等等。欢迎下载体验,探索更多可能!

Coco AI v0.1.0

Coco AI 是一个完全开源、跨平台的统一 AI 搜索与效率工具,能够连接并搜索多种数据源,包括应用程序、文件、谷歌网盘、Notion、语雀、Hugo 等本地与云端数据。通过接入 DeepSeek 等大模型,Coco AI 实现了智能化的企业或个人知识库管理,注重隐私,支持私有部署,帮助用户快速、智能地访问信息。

本次发布的是 Coco AI 第一个预览版本, 支持 MacOS 12 以上的操作系统, 欢迎大家下载使用 ~

项目主页: https://coco.rs/

开源地址:

以下是操作界面截图:

  1. 搜索本地桌面应用程序
  2. 搜索企业或个人的知识库,混合搜索多个数据源
  3. 基于个人的知识库来与 AI 助手聊天
  4. AI 助手完整模式支持历史会话的查看
  5. 支持接入自己搭建的 Coco Server, 私有部署, 隐私安全

INFINI Easysearch v1.10.2

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

Easysearch 本次更新如下:

功能更新

  • lucene 版本更新
    • lucene 版本更新到 8.11.4,是 lucene8.x 系列的最后一个版本
    • jna 更新到 5.12.1
  • IK 分词器: 增强词典配置的灵活性和可扩展性
    • 支持字段级别的词典配置,用户可通过自定义 tokenizer 为不同索引、不同字段配置专用词典
    • 优化词典管理机制
    • 支持自定义词典与 IK 默认词典合并使用
    • 词库数据存储在可配置的索引中,支持实时更新
    • 可使用内置词库索引或自定义词库索引(需保持相同结构)
  • 索引生命周期管理
    • delete action 支持同时基于索引创建时间和文档最新时间戳来执行删除操作

问题修复

  • 修复了 rollup 平均值(avg)聚合计算错误

优化改进

  • 优化 rollup 索引的创建流程

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

INFINI Console v1.28.2

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

Console 在线体验:

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

Console 本次更新如下:

功能更新

  • 告警功能支持根据桶之间文档数差值和内容差异告警
  • 当使用 Easysearch 存储指标时,增加 Rollup 索引生命周期

问题修复

  • 修复 Insight API 处理多时间序列数据时数据丢失的问题

优化改进

  • 告警图表新增复制请求
  • 在已注册的 Agent 管理界面中新增关联凭据设置
  • 在集群编辑中新增采集模式
  • 当使用 Easysearch 存储指标时,自动为系统集群创建 Agent 指标写入最小权限用户
  • 优化 LDAP 用户映射增加默认权限组

INFINI Gateway v1.28.2

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

Gateway 本次更新如下:

功能更新

优化改进

  • 移除 Elasticsearch 过滤器中因模式不匹配导致的不必要节点重新选择(#62)

INFINI Agent v1.28.2

INFINI Agent 负责采集和上传 Elasticsearch, Easysearch, Opensearch 集群的日志和指标信息,通过 INFINI Console 管理,支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

问题修复

  • 添加了日志并优化了一些设置 (#17)
  • 修复了在 Docker 中使用不同用户进程时注册失败的问题 (#11)
  • 同步更新 Framework v1.1.2 修复的一些已知问题

INFINI Loadgen v1.28.2

INFINI Loadgen 是一款开源的专为 Easysearch、Elasticsearch、OpenSearch 设计的轻量级性能测试工具。

Loadgen 本次更新如下:

问题修复

INFINI Framework v1.1.2

INFINI Framework 是 INFINI Labs 基于 Golang 的产品的核心基础,已开源。该框架以开发者为中心设计,简化了构建高性能、可扩展且可靠的应用程序的过程。

Framework 本次更新如下:

问题修复

  • 修复了队列消费者崩溃时 []byte 操作符的问题 (#77)
  • 修复了索引统计信息收集任务中间隔配置不正确的问题 (#80)
  • 修复了重载文件需要使用先前位置的问题 (#79)
  • 通过将集群健康默认状态初始化为绿色来修复空指针崩溃 (#81)

优化改进

  • 重构环回地址以使用常量 (#73)
  • 为队列消费者添加调试消息 (#77)

更多详情请查看以下详细的 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

收起阅读 »

【搜索客社区日报】第1986期 (2024-02-17)

1、引爆知识革命!Easysearch 携手 DeepSeek 打造下一代智能问答系统
https://infinilabs.cn/blog/202 ... stem/

2、谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇
https://infinilabs.cn/blog/202 ... rt-2/

3、谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇
https://infinilabs.cn/blog/202 ... rt-3/

4、CoCo AI APP 初体验:开启智能知识管理新篇章
https://mp.weixin.qq.com/s/Q9DfNtarX7uwvrBKCoQqDA

5、解决DeepSeek服务器繁忙问题
https://blog.csdn.net/2401_834 ... 20612

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、引爆知识革命!Easysearch 携手 DeepSeek 打造下一代智能问答系统
https://infinilabs.cn/blog/202 ... stem/

2、谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇
https://infinilabs.cn/blog/202 ... rt-2/

3、谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇
https://infinilabs.cn/blog/202 ... rt-3/

4、CoCo AI APP 初体验:开启智能知识管理新篇章
https://mp.weixin.qq.com/s/Q9DfNtarX7uwvrBKCoQqDA

5、解决DeepSeek服务器繁忙问题
https://blog.csdn.net/2401_834 ... 20612

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

【搜索客社区日报】第1984期 (2024-02-13)

1.ClickHouse发起十亿JSON文档挑战,性能完胜MongoDB、ES、DuckDB和PostgreSQL等数据库
https://mp.weixin.qq.com/s/V2eYBWBNlJJpeVk1qq3wpg
2.拆解"ES已死"伪命题:Agentic RAG时代搜索引擎的终极形态
https://mp.weixin.qq.com/s/roZiTA4p4tkh6EVUvJYaNA
3.Go语言开发AI智能体有多丝滑?字节重磅开源Eino框架,内含保姆级教程
https://mp.weixin.qq.com/s/K8LzjIxcAVdYwPkeglp6Jg
4.大神卡帕西 3 个半小时视频深入浅出 LLM 原理
https://www.youtube.com/watch?v=7xTGNNLPyMI

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.ClickHouse发起十亿JSON文档挑战,性能完胜MongoDB、ES、DuckDB和PostgreSQL等数据库
https://mp.weixin.qq.com/s/V2eYBWBNlJJpeVk1qq3wpg
2.拆解"ES已死"伪命题:Agentic RAG时代搜索引擎的终极形态
https://mp.weixin.qq.com/s/roZiTA4p4tkh6EVUvJYaNA
3.Go语言开发AI智能体有多丝滑?字节重磅开源Eino框架,内含保姆级教程
https://mp.weixin.qq.com/s/K8LzjIxcAVdYwPkeglp6Jg
4.大神卡帕西 3 个半小时视频深入浅出 LLM 原理
https://www.youtube.com/watch?v=7xTGNNLPyMI

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

【搜索客社区日报】第1985期 (2024-02-14)

1、清华大学 | 104页《DeepSeek:从入门到精通》,人人必备的Ai手册!
https://mp.weixin.qq.com/s/gkAd6I7k4ESWcJXrnUNCUA

2、漫谈 DeepSeek 及其背后的核心技术
https://mp.weixin.qq.com/s/W4LzpMb3cIn0zVlW2oVung

3、Easysearch 写入限速实战
https://mp.weixin.qq.com/s/utjLtXi85oLXTv5OXnL6pQ

4、使用 INFINI Gateway 保护 Elasticsearch 集群之阻断不合理的查询
https://infinilabs.cn/blog/202 ... eway/

5、谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇
https://infinilabs.cn/blog/202 ... rt-1/

编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、清华大学 | 104页《DeepSeek:从入门到精通》,人人必备的Ai手册!
https://mp.weixin.qq.com/s/gkAd6I7k4ESWcJXrnUNCUA

2、漫谈 DeepSeek 及其背后的核心技术
https://mp.weixin.qq.com/s/W4LzpMb3cIn0zVlW2oVung

3、Easysearch 写入限速实战
https://mp.weixin.qq.com/s/utjLtXi85oLXTv5OXnL6pQ

4、使用 INFINI Gateway 保护 Elasticsearch 集群之阻断不合理的查询
https://infinilabs.cn/blog/202 ... eway/

5、谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇
https://infinilabs.cn/blog/202 ... rt-1/

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

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

1.DeepSeek-V3 解析-1:多头潜在注意力机制(需要梯子)
https://medium.com/towards-dat ... a67c4
 
2. DeepSeek-V3 解析-2: DeepSeekMoE 模式(需要梯子)
https://medium.com/ai-advances ... c56c1
 
3. Lucene 中的并发错误:如何修复乐观并发失败
https://blog.csdn.net/UbuntuTo ... 10711

4.Elasticsearch:向量搜索的快速介绍
https://blog.csdn.net/UbuntuTo ... 85873
 
编辑:kin122 
更多资讯:http://news.searchkit.cn
继续阅读 »
1.DeepSeek-V3 解析-1:多头潜在注意力机制(需要梯子)
https://medium.com/towards-dat ... a67c4
 
2. DeepSeek-V3 解析-2: DeepSeekMoE 模式(需要梯子)
https://medium.com/ai-advances ... c56c1
 
3. Lucene 中的并发错误:如何修复乐观并发失败
https://blog.csdn.net/UbuntuTo ... 10711

4.Elasticsearch:向量搜索的快速介绍
https://blog.csdn.net/UbuntuTo ... 85873
 
编辑:kin122 
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第1982期 (2024-02-11)


1. 用 OpenSearch 进行集中日志记录(需要梯子)
https://mycloudjourney.medium. ... 62cd5
2. Canva团队是怎么做图片搜索的(需要梯子)
https://www.canva.dev/blog/eng ... arch/
3. FAISS 和 ES 的掰头(需要梯子)
https://medium.com/%40krasniuk ... 1dc29
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »

1. 用 OpenSearch 进行集中日志记录(需要梯子)
https://mycloudjourney.medium. ... 62cd5
2. Canva团队是怎么做图片搜索的(需要梯子)
https://www.canva.dev/blog/eng ... arch/
3. FAISS 和 ES 的掰头(需要梯子)
https://medium.com/%40krasniuk ... 1dc29
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
  收起阅读 »

搜索客社区日报 第1981期 (2025-02-10)

1、使用Elasticsearch进行基于图的检索增强生成
https://mp.weixin.qq.com/s/Xdxpt69aVuSr_DrXappcRQ

2、一文读懂Deepseek:开启智能时代新征程
https://blog.csdn.net/qq_61962 ... 62821

3、如何使用 Filebeat 8 连接 Easysearch
https://mp.weixin.qq.com/s/SOBF9MR2yK9W8-pGEt-zGA

4、Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索
https://mp.weixin.qq.com/s/OL8ISx-7ARdvcBpZqLTA5Q

5、本地测试 DeepSeek R1 用于 RAG 与 Ollama 和 Kibana
https://mp.weixin.qq.com/s/Rs4_1IjNDIm5dmF4jd4aOw

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、使用Elasticsearch进行基于图的检索增强生成
https://mp.weixin.qq.com/s/Xdxpt69aVuSr_DrXappcRQ

2、一文读懂Deepseek:开启智能时代新征程
https://blog.csdn.net/qq_61962 ... 62821

3、如何使用 Filebeat 8 连接 Easysearch
https://mp.weixin.qq.com/s/SOBF9MR2yK9W8-pGEt-zGA

4、Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索
https://mp.weixin.qq.com/s/OL8ISx-7ARdvcBpZqLTA5Q

5、本地测试 DeepSeek R1 用于 RAG 与 Ollama 和 Kibana
https://mp.weixin.qq.com/s/Rs4_1IjNDIm5dmF4jd4aOw

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

Easysearch 证书:Windows 上创建自签名证书的 7 种方法

背景

最近 INFINI Labs 社区有 Easysearch 开发者反馈,其开发环境为 Windows 系统,安装部署 Easysearch 时初始化证书遇到麻烦,如果没有证书就无法开启 Easysearch TLS 传输加密来保护数据的网络传输安全。本文将介绍在 Windows 上创建自签名证书的 7 种不同方法。

使用在线工具 certificatetools.com

在允许生成自签名证书的在线服务中,CertificateTools 是最先进的。只需查看所有可用选项即可:

就这么简单!

使用 Let’s Encrypt

首先,安装 Certbot,这是 Let’s Encrypt 官方推荐的工具,用于自动化获取和续期 SSL/TLS 证书。

1. 安装 Certbot

2. 获取证书

  • 打开 命令提示符 或 PowerShell 以管理员身份运行。
  • 输入以下命令获取证书(替换 example.com 为你的域名):
certbot certonly --standalone --preferred-challenges http -d example.com
  • Certbot 会自动通过 HTTP 验证域名并生成证书。证书会存储在:
C:\Certbot\live\example.com\

里面有以下文件:

  • cert.pem:证书。
  • privkey.pem:私钥。
  • fullchain.pem:完整证书链。

3. 导入证书

  • 打开 Windows 证书管理器 (mmc),选择 个人 文件夹。
  • 右键点击 个人 文件夹,选择 导入,导入 cert.pem 和 privkey.pem。

4. 验证证书

  • 在证书管理器中,确认证书已成功导入并配置。

5. 续期证书

  • 使用以下命令手动续期证书:
certbot renew

使用 OpenSSL

OpenSSL 是一个跨平台的工具,适用于各种操作系统,包括 Windows。在 Windows 上,你需要首先安装 OpenSSL。

步骤:

  1. OpenSSL 官方网站 下载并安装 OpenSSL。
  2. 打开 命令提示符 或 PowerShell,并导航到 OpenSSL 的安装目录。
  3. 运行以下命令生成自签名证书:
openssl req -new -x509 -keyout mycert.pem -out mycert.pem -days 365

-new:创建一个新的证书请求。
-x509:生成一个自签名证书。
-keyout 和 -out:指定证书和私钥文件的保存路径。
-days 365:证书有效期为 365 天。

  1. 系统会提示你输入一些证书的详细信息,如国家、组织名等。

验证:

检查生成的 mycert.pem 文件是否存在,并通过命令 openssl x509 -in mycert.pem -text 查看证书的内容。

使用 PowerShell

PowerShell 提供了一个简单的命令 New-SelfSignedCertificate 来创建自签名证书。以下是具体的操作步骤:

步骤:

  1. 按下 Windows + X,选择 Windows PowerShell (管理员)。
  2. 在 PowerShell 窗口中输入以下命令:
New-SelfSignedCertificate -DnsName "example.com" -CertStoreLocation "cert:\LocalMachine\My"

-DnsName "example.com":指定证书的 DNS 名称,可以更改为你需要的域名或主机名。
-CertStoreLocation "cert:\LocalMachine\My":将证书存储到本地计算机的证书存储区。

  1. 执行后,证书将被创建,并存储在 Windows 证书管理器中。

验证:

  1. 打开 运行 (Windows + R),输入 mmc,点击确定。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,选择 证书,然后选择 计算机帐户。
  3. 查看 个人 文件夹,你将看到刚才创建的证书。

使用 IIS

IIS(Internet Information Services)是一种 Web 服务器软件,可以通过它为你的服务器生成自签名证书。

步骤:

  1. 打开 IIS 管理器,选择你的服务器名称。
  2. 在主界面中,双击 服务器证书 选项。
  3. 在右侧操作面板中,点击 创建自签名证书。
  4. 输入证书的名称(如:example.com),然后选择证书的存储位置。
  5. 点击确定,证书将被创建并存储在 IIS 中。

验证:

在 服务器证书 部分,你将看到已创建的证书。

使用 MMC 管理工具

Windows 提供了 MMC 管理工具,可以通过图形界面创建自签名证书。

步骤:

  1. 按 Windows + R 打开运行窗口,输入 mmc 并按下回车。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,点击 证书 并选择 计算机帐户。
  3. 选择 本地计算机 > 确定。
  4. 在左侧的证书树中,右键点击 个人 文件夹,选择 所有任务 > 请求新证书。
  5. 跟随向导填写证书的详细信息并选择 自签名证书 选项,完成后证书将被创建。

验证:

在 MMC 中查看证书是否已经生成,并且可以在 个人 文件夹中找到它。

使用 XCA 工具

XCA 是一个开源工具,支持生成和管理证书。它为用户提供了一个图形化界面,适合那些不熟悉命令行操作的用户。

步骤:

  1. XCA 官方网站 下载并安装 XCA。
  2. 启动 XCA,点击 文件 > 新建数据库 来创建一个新的证书数据库。
  3. 在 证书 选项卡中,点击 新建证书。
  4. 在证书的设置中,选择 自签名证书,然后填写证书的详细信息。
  5. 点击 保存 来生成证书。

验证:

生成的证书可以在 XCA 的 证书 列表中查看,并导出为文件或在需要的地方使用。

总结

在 Windows 上创建自签名证书对于开发者和管理员来说是一项常见任务。自签名证书通常用于测试环境、开发、或者是没有商业证书的情况下使用。本文所述在 Windows 上创建自签名证书的 7 种方法都有详细步骤和验证方式,希望能给你带来帮助。


参考资料

  1. 7 ways to create self-signed certificates on Windows

  2. 如何使用 XCA 创建证书
继续阅读 »

背景

最近 INFINI Labs 社区有 Easysearch 开发者反馈,其开发环境为 Windows 系统,安装部署 Easysearch 时初始化证书遇到麻烦,如果没有证书就无法开启 Easysearch TLS 传输加密来保护数据的网络传输安全。本文将介绍在 Windows 上创建自签名证书的 7 种不同方法。

使用在线工具 certificatetools.com

在允许生成自签名证书的在线服务中,CertificateTools 是最先进的。只需查看所有可用选项即可:

就这么简单!

使用 Let’s Encrypt

首先,安装 Certbot,这是 Let’s Encrypt 官方推荐的工具,用于自动化获取和续期 SSL/TLS 证书。

1. 安装 Certbot

2. 获取证书

  • 打开 命令提示符 或 PowerShell 以管理员身份运行。
  • 输入以下命令获取证书(替换 example.com 为你的域名):
certbot certonly --standalone --preferred-challenges http -d example.com
  • Certbot 会自动通过 HTTP 验证域名并生成证书。证书会存储在:
C:\Certbot\live\example.com\

里面有以下文件:

  • cert.pem:证书。
  • privkey.pem:私钥。
  • fullchain.pem:完整证书链。

3. 导入证书

  • 打开 Windows 证书管理器 (mmc),选择 个人 文件夹。
  • 右键点击 个人 文件夹,选择 导入,导入 cert.pem 和 privkey.pem。

4. 验证证书

  • 在证书管理器中,确认证书已成功导入并配置。

5. 续期证书

  • 使用以下命令手动续期证书:
certbot renew

使用 OpenSSL

OpenSSL 是一个跨平台的工具,适用于各种操作系统,包括 Windows。在 Windows 上,你需要首先安装 OpenSSL。

步骤:

  1. OpenSSL 官方网站 下载并安装 OpenSSL。
  2. 打开 命令提示符 或 PowerShell,并导航到 OpenSSL 的安装目录。
  3. 运行以下命令生成自签名证书:
openssl req -new -x509 -keyout mycert.pem -out mycert.pem -days 365

-new:创建一个新的证书请求。
-x509:生成一个自签名证书。
-keyout 和 -out:指定证书和私钥文件的保存路径。
-days 365:证书有效期为 365 天。

  1. 系统会提示你输入一些证书的详细信息,如国家、组织名等。

验证:

检查生成的 mycert.pem 文件是否存在,并通过命令 openssl x509 -in mycert.pem -text 查看证书的内容。

使用 PowerShell

PowerShell 提供了一个简单的命令 New-SelfSignedCertificate 来创建自签名证书。以下是具体的操作步骤:

步骤:

  1. 按下 Windows + X,选择 Windows PowerShell (管理员)。
  2. 在 PowerShell 窗口中输入以下命令:
New-SelfSignedCertificate -DnsName "example.com" -CertStoreLocation "cert:\LocalMachine\My"

-DnsName "example.com":指定证书的 DNS 名称,可以更改为你需要的域名或主机名。
-CertStoreLocation "cert:\LocalMachine\My":将证书存储到本地计算机的证书存储区。

  1. 执行后,证书将被创建,并存储在 Windows 证书管理器中。

验证:

  1. 打开 运行 (Windows + R),输入 mmc,点击确定。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,选择 证书,然后选择 计算机帐户。
  3. 查看 个人 文件夹,你将看到刚才创建的证书。

使用 IIS

IIS(Internet Information Services)是一种 Web 服务器软件,可以通过它为你的服务器生成自签名证书。

步骤:

  1. 打开 IIS 管理器,选择你的服务器名称。
  2. 在主界面中,双击 服务器证书 选项。
  3. 在右侧操作面板中,点击 创建自签名证书。
  4. 输入证书的名称(如:example.com),然后选择证书的存储位置。
  5. 点击确定,证书将被创建并存储在 IIS 中。

验证:

在 服务器证书 部分,你将看到已创建的证书。

使用 MMC 管理工具

Windows 提供了 MMC 管理工具,可以通过图形界面创建自签名证书。

步骤:

  1. 按 Windows + R 打开运行窗口,输入 mmc 并按下回车。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,点击 证书 并选择 计算机帐户。
  3. 选择 本地计算机 > 确定。
  4. 在左侧的证书树中,右键点击 个人 文件夹,选择 所有任务 > 请求新证书。
  5. 跟随向导填写证书的详细信息并选择 自签名证书 选项,完成后证书将被创建。

验证:

在 MMC 中查看证书是否已经生成,并且可以在 个人 文件夹中找到它。

使用 XCA 工具

XCA 是一个开源工具,支持生成和管理证书。它为用户提供了一个图形化界面,适合那些不熟悉命令行操作的用户。

步骤:

  1. XCA 官方网站 下载并安装 XCA。
  2. 启动 XCA,点击 文件 > 新建数据库 来创建一个新的证书数据库。
  3. 在 证书 选项卡中,点击 新建证书。
  4. 在证书的设置中,选择 自签名证书,然后填写证书的详细信息。
  5. 点击 保存 来生成证书。

验证:

生成的证书可以在 XCA 的 证书 列表中查看,并导出为文件或在需要的地方使用。

总结

在 Windows 上创建自签名证书对于开发者和管理员来说是一项常见任务。自签名证书通常用于测试环境、开发、或者是没有商业证书的情况下使用。本文所述在 Windows 上创建自签名证书的 7 种方法都有详细步骤和验证方式,希望能给你带来帮助。


参考资料

  1. 7 ways to create self-signed certificates on Windows

  2. 如何使用 XCA 创建证书
收起阅读 »

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/

收起阅读 »

Easysearch 集群通过 API 进行用户密码重置

在日常使用 Easysearch 中,难免会遇到集群密码需要重置的情况(如密码遗失、安全审计要求等)。

通过查看 Easysearch 用户接口文档,创建用户使用如下接口:

PUT _security/user/<username>
{
  "password": "adminpass",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
  }
}

同样可以通过该接口对用户进行密码重置:

PUT _security/user/<username>
{
  "password": "adminpass111",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
}

API 接口创建的用户

创建一个测试用户 test,并进行访问验证。

通过接口重置用户 test 密码,并进行访问验证。

配置文件创建的用户

在配置文件 user.yml 中添加测试用户(test1、test2)配置:

## Test users
test1:
  hash: "$2y$12$ZNfKKCeeRQXOWX27W50tbu0Tq4NT4ADdCQOBoZzokI1zR8ZEUWm4W" # test1
  reserved: true
  roles:
    - "readall_and_monitor"

test2:
  hash: "$2y$12$m4/eSiDlzRII87vNeKwzteEHGpgpbdMr5tRvOfve/xIbEYdC4bU7a" # test2
  reserved: false
  roles:
    - "readall_and_monitor"

其中 hash 字段是将用户密码哈希出来的值,可通过 bin/hash_password.sh -p "<明文密码>" 生成。

进行用户访问验证。

对 test1、test2 用户进行密码重置。

用户 test1 重置失败,用户 test2 重置成功。用户 test1 重置失败是因为配置了 reserved: true,将用户 test1 指定为内置用户,使用用户 admin 会因为权限无法进行密码重置,那就需要使用有更高权限的管理证书进行密码重置。默认在 Easysearch 集群执行初始化脚本 bin/initialize.sh 时,会在 config 目录下生成证书文件,其中 admin.crtadmin.key 为管理证书。

test1 用户密码重置成功,进行访问验证。

关于 Easysearch

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

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

继续阅读 »

在日常使用 Easysearch 中,难免会遇到集群密码需要重置的情况(如密码遗失、安全审计要求等)。

通过查看 Easysearch 用户接口文档,创建用户使用如下接口:

PUT _security/user/<username>
{
  "password": "adminpass",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
  }
}

同样可以通过该接口对用户进行密码重置:

PUT _security/user/<username>
{
  "password": "adminpass111",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
}

API 接口创建的用户

创建一个测试用户 test,并进行访问验证。

通过接口重置用户 test 密码,并进行访问验证。

配置文件创建的用户

在配置文件 user.yml 中添加测试用户(test1、test2)配置:

## Test users
test1:
  hash: "$2y$12$ZNfKKCeeRQXOWX27W50tbu0Tq4NT4ADdCQOBoZzokI1zR8ZEUWm4W" # test1
  reserved: true
  roles:
    - "readall_and_monitor"

test2:
  hash: "$2y$12$m4/eSiDlzRII87vNeKwzteEHGpgpbdMr5tRvOfve/xIbEYdC4bU7a" # test2
  reserved: false
  roles:
    - "readall_and_monitor"

其中 hash 字段是将用户密码哈希出来的值,可通过 bin/hash_password.sh -p "<明文密码>" 生成。

进行用户访问验证。

对 test1、test2 用户进行密码重置。

用户 test1 重置失败,用户 test2 重置成功。用户 test1 重置失败是因为配置了 reserved: true,将用户 test1 指定为内置用户,使用用户 admin 会因为权限无法进行密码重置,那就需要使用有更高权限的管理证书进行密码重置。默认在 Easysearch 集群执行初始化脚本 bin/initialize.sh 时,会在 config 目录下生成证书文件,其中 admin.crtadmin.key 为管理证书。

test1 用户密码重置成功,进行访问验证。

关于 Easysearch

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

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

收起阅读 »

如何使用 Filebeat 8 连接 Easysearch

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。

Easysearch 不开启兼容参数的情况

Easysearch 默认情况下未开启 Elastic 兼容功能。此时直接用 Filebeat 去连接 Easysearch 会失败,报错 "could not connect to a compatible version of Elasticsearch" ,直译过来就是“无法连接到兼容的 Elasticsearch 版本”。

Easysearch 开启 elasticsearch.api_compatibility 参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,我们先开第一个。

elasticsearch.api_compatibility: true
#elasticsearch.api_compatibility_version: "8.9.0"

启动 Filebeat 连接。

这次 Filebeat 检测到了一个兼容的版本 7.10.2,并导入了一个叫 filebeat 的索引生命周期管理策略,但最终因为无法导入模板而失败了。

索引生命周期查看。

关闭 Filebeat 的导入模板功能尝试连接,修改配置 filebeat.yml 关闭模板导入。

setup.template.enabled: false

启动 Filebeat 连接 Easysearch。

这次 Filebeat 成功连接上了 Easysearch,并成功将采集数据写入。

Easysearch 同时开启两个兼容性参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,这次我们二个同时打开。

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

清理测试数据后,启动 Filebeat 连接。

跟打开第一个兼容参数很像,只是 Filebeat 检测到的版本变成了 8.9.0。

我们关闭 Filebeat 的模板导入功能,再次连接——成功

数据也成功写入。

注意事项

Easysearch 的第一个兼容参数 elasticsearch.api_compatibility 必须开启,否则 Filebeat 检测到的还是 1.9.0 版本无法正常连接。

如果 Easysearch 使用的是 1.9.0 之前的版本,可以使用网关代理 Easysearch 的方法

总结

Easysearch-1.9.0 必须开启第一个兼容参数,此时检测到的版本是 7.10.2。也可同时开启两个兼容性参数,此时检测到的版本是 8.9.0。

Filebeat 必须关闭模板导入功能。

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

继续阅读 »

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。

Easysearch 不开启兼容参数的情况

Easysearch 默认情况下未开启 Elastic 兼容功能。此时直接用 Filebeat 去连接 Easysearch 会失败,报错 "could not connect to a compatible version of Elasticsearch" ,直译过来就是“无法连接到兼容的 Elasticsearch 版本”。

Easysearch 开启 elasticsearch.api_compatibility 参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,我们先开第一个。

elasticsearch.api_compatibility: true
#elasticsearch.api_compatibility_version: "8.9.0"

启动 Filebeat 连接。

这次 Filebeat 检测到了一个兼容的版本 7.10.2,并导入了一个叫 filebeat 的索引生命周期管理策略,但最终因为无法导入模板而失败了。

索引生命周期查看。

关闭 Filebeat 的导入模板功能尝试连接,修改配置 filebeat.yml 关闭模板导入。

setup.template.enabled: false

启动 Filebeat 连接 Easysearch。

这次 Filebeat 成功连接上了 Easysearch,并成功将采集数据写入。

Easysearch 同时开启两个兼容性参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,这次我们二个同时打开。

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

清理测试数据后,启动 Filebeat 连接。

跟打开第一个兼容参数很像,只是 Filebeat 检测到的版本变成了 8.9.0。

我们关闭 Filebeat 的模板导入功能,再次连接——成功

数据也成功写入。

注意事项

Easysearch 的第一个兼容参数 elasticsearch.api_compatibility 必须开启,否则 Filebeat 检测到的还是 1.9.0 版本无法正常连接。

如果 Easysearch 使用的是 1.9.0 之前的版本,可以使用网关代理 Easysearch 的方法

总结

Easysearch-1.9.0 必须开启第一个兼容参数,此时检测到的版本是 7.10.2。也可同时开启两个兼容性参数,此时检测到的版本是 8.9.0。

Filebeat 必须关闭模板导入功能。

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

收起阅读 »

如何使用 Logstash 8 连接 Easysearch

背景

很多小伙伴都在使用 Logstash ,随着各家安全扫描、安全策略的加固,不少小伙伴已经开始使用 Logstash 8 了。在使用 Logstash 8 连接 Easysearch 的时候可能会遇到问题,比如下图。

提示连接的不是兼容版本的 Elasticsearch 。

解决方法有两种

两种方法对 Logstash 和 Logstash-oss 两种版本都适用。

一、用 INFINI Gateway 代理 Easysearch

使用此方法, Logstash 连接的是 INFINI Gateway ,由 INFINI Gateway “通过” Logstash 8 的检查。

优点是对 Easysearch 版本无要求。

默认的网关配置要稍作修改。

  1. 修改 router.rules 部分
router:
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      - method:
          - "GET"
        pattern:
          - "/"
        flow:
          - overwrite_flow
      - method:
          - "GET"
        pattern:
          - "/_license"
        flow:
          - overwrite_license_flow
      - method:
          - "*"
        pattern:
          - "/_bulk"
          - "/{any_index}/_bulk"
        flow:
          - async_bulk_flow
  1. flow 下增加 overwrite_flow 和 overwrite_license_flow
 - name: overwrite_flow
    filter:
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000
      - set_context:
          context:
            _ctx.response.body_json.version.number: '"8.14.3"'
            _ctx.response.body_json.version.build_flavor: '"default"'
            _ctx.response.body_json.tagline: '"You Know, for Search"'
            _ctx.response.body_json.minimum_wire_compatibility_version: '"7.17.0"'
            _ctx.response.body_json.minimum_index_compatibility_version: '"7.0.0"'
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch
  - name: overwrite_license_flow
    filter:
      - echo:
          message: '{"license": "ok"}'
      - set_context:
          context:
            _ctx.response.code: 200
            _ctx.response.body_json.license.status: '"active"'
            _ctx.response.body_json.license.type: '"basic"'
            _ctx.response.body_json.license.issuer: '"elasticsearch"'
            _ctx.response.body_json.license.issue_date: '"2024-09-12T13:10:55.848Z"'
            _ctx.response.body_json.license.start_date_in_millis: "-1"
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch

记住 Logstash 要填写 INFINI Gateway 的地址和端口,并关闭自动导入模板功能。

连接成功后,如下图。

二、使用 Easysearch 1.9.0 及以上版本

Easysearch 1.9.0 已经增加了适配 Logstash8.x 的请求 header,因此使用 Easysearch 1.9.0 的小伙伴,只需打开对应的设置就可以了。

在 easysearch.yml 中,打开下面的 elastic 的兼容参数(默认已注释):

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

注意 Logstash 配置中关闭自动导入模板功能。

output {
  elasticsearch {
   hosts => ["http://127.0.0.1:9200"]
   index => "logstash8"
   manage_template => false
}
}

启动 Logstash 连接到 easysearch 后, Logstash 日志会输出检测到版本 8.9.0 。

最新 Easysearch 下载地址:下载

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

继续阅读 »

背景

很多小伙伴都在使用 Logstash ,随着各家安全扫描、安全策略的加固,不少小伙伴已经开始使用 Logstash 8 了。在使用 Logstash 8 连接 Easysearch 的时候可能会遇到问题,比如下图。

提示连接的不是兼容版本的 Elasticsearch 。

解决方法有两种

两种方法对 Logstash 和 Logstash-oss 两种版本都适用。

一、用 INFINI Gateway 代理 Easysearch

使用此方法, Logstash 连接的是 INFINI Gateway ,由 INFINI Gateway “通过” Logstash 8 的检查。

优点是对 Easysearch 版本无要求。

默认的网关配置要稍作修改。

  1. 修改 router.rules 部分
router:
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      - method:
          - "GET"
        pattern:
          - "/"
        flow:
          - overwrite_flow
      - method:
          - "GET"
        pattern:
          - "/_license"
        flow:
          - overwrite_license_flow
      - method:
          - "*"
        pattern:
          - "/_bulk"
          - "/{any_index}/_bulk"
        flow:
          - async_bulk_flow
  1. flow 下增加 overwrite_flow 和 overwrite_license_flow
 - name: overwrite_flow
    filter:
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000
      - set_context:
          context:
            _ctx.response.body_json.version.number: '"8.14.3"'
            _ctx.response.body_json.version.build_flavor: '"default"'
            _ctx.response.body_json.tagline: '"You Know, for Search"'
            _ctx.response.body_json.minimum_wire_compatibility_version: '"7.17.0"'
            _ctx.response.body_json.minimum_index_compatibility_version: '"7.0.0"'
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch
  - name: overwrite_license_flow
    filter:
      - echo:
          message: '{"license": "ok"}'
      - set_context:
          context:
            _ctx.response.code: 200
            _ctx.response.body_json.license.status: '"active"'
            _ctx.response.body_json.license.type: '"basic"'
            _ctx.response.body_json.license.issuer: '"elasticsearch"'
            _ctx.response.body_json.license.issue_date: '"2024-09-12T13:10:55.848Z"'
            _ctx.response.body_json.license.start_date_in_millis: "-1"
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch

记住 Logstash 要填写 INFINI Gateway 的地址和端口,并关闭自动导入模板功能。

连接成功后,如下图。

二、使用 Easysearch 1.9.0 及以上版本

Easysearch 1.9.0 已经增加了适配 Logstash8.x 的请求 header,因此使用 Easysearch 1.9.0 的小伙伴,只需打开对应的设置就可以了。

在 easysearch.yml 中,打开下面的 elastic 的兼容参数(默认已注释):

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

注意 Logstash 配置中关闭自动导入模板功能。

output {
  elasticsearch {
   hosts => ["http://127.0.0.1:9200"]
   index => "logstash8"
   manage_template => false
}
}

启动 Logstash 连接到 easysearch 后, Logstash 日志会输出检测到版本 8.9.0 。

最新 Easysearch 下载地址:下载

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

收起阅读 »