要不要也来分享分享一下啊

同样 15,000 条重规则,Percolate Query 比 Easysearch 慢 21.8 倍 —— Heavy-OR 场景实测

15,000 条 heavy-OR 规则,200,000 条文档,同一台机器:Easysearch 在线规则引擎全流程 11.68 秒,Percolate Query 仅搜索阶段就跑了 254.30 秒——慢了 21.8 倍。

在"规则先存、文档后到"这类场景下,Percolate Query 的延迟会随规则数量和复杂度的增长快速恶化。规则涨到数千条后,每批文档匹配的耗时可以从秒级攀升至几分钟。这类问题换索引参数、调批次大小、精简 DSL,都治标不治本,根子在执行模型本身。

本文通过一组 heavy-OR 基准测试,量化两种方案的实际差距。

测试配置

测试在同一台主机上运行,使用同一套规则文本和文档样本。Percolate Query 的查询条件由相同规则翻译而来,保证两侧规则语义一致。

参数
规则总数 15,000
文档总数 200,000
批次大小 10,000 / 批
重规则数量 2,500 条大 OR 热点规则
单条大 OR 规模 随机 50 ~ 500 个 OR 条件

测试结果

路径 用时
纯写入 plain_bulk 6.025535s
在线规则引擎 rules_only 11.684568s
Percolate Query 搜索阶段 254.304583s

同样 15,000 条规则 + 200,000 条文档

Easysearch 11.68s 在线规则引擎全流程 Percolate Query 254.30s 只算搜索阶段 Percolate Query 比 Easysearch 慢了 21.8 倍 仅搜索阶段就多花 242.62 秒

具体指标:

  • Easysearch 在线规则引擎全流程:11.68s
  • Percolate Query 搜索阶段:254.30s
  • 差值:242.62s
  • 倍数:21.76 倍
  • 每批(10,000 文档)平均耗时:Easysearch 约 0.49s,Percolate Query 约 12.69s

开启规则引擎的增量成本

规则匹配会对写入链路产生多少额外开销,是评估在线规则引擎可行性的重要指标之一。

开启规则引擎的写入增量

纯写入 6.03s plain_bulk 基线 开启规则引擎 11.68s 基线 6.03s + 新增 5.66s 规则引擎新增成本 仅 5.66s Percolate 搜索阶段同期耗时 254.30s

与之对比,Percolate Query 仅搜索阶段就需要 254.30s。换言之,Easysearch 在线规则引擎把规则匹配叠加进写入流程,新增成本约为 Percolate Query 搜索耗时的 1/44.9

只看匹配引擎本体

上一组数据(11.68s vs 254.30s)包含了 Easysearch 的在线写入、bulk 解析和索引处理等通用开销。为了单独衡量规则匹配引擎自身的性能,我们用 Java 直调 JNI 做了一次离线 match,绕过写入链路,只跑规则匹配逻辑。

路径 用时
Easysearch 纯匹配(JNI 离线) 5.046934s
Percolate Query 搜索阶段 254.304583s

只比匹配本身

Easysearch 纯匹配 5.05s Java JNI 离线直调 Percolate Query 254.30s 搜索阶段 只看匹配引擎本体 慢了 50.4 倍 254.30 ÷ 5.05 = 50.39

这组数据说明两点:Easysearch 的性能优势并非来自写入链路的整合效率,即便剔除通用写入成本,规则匹配引擎本体与 Percolate Query 之间依然存在约 50 倍的差距。

为什么 Percolate Query 会慢

根因在执行模型,OR 条件多只是放大器。

每批文档到达时,Percolate Query 都要走完这套流程:

  1. 把文档放进临时内存索引
  2. 基于规则中的 terms 筛选候选规则
  3. 对候选规则逐条验证

以本次测试为例,各阶段耗时分布如下:

  • 规则翻译:9.560294s
  • 规则导入:7.451857s
  • percolate 搜索:254.304583s

搜索阶段是每批文档都必须重新支付的代价。

Heavy-OR 规则在这套流程里两头放大:规则覆盖面广,候选集更难剪掉;单条规则条件多,逐条验证也更重。

Easysearch 规则引擎把规则提前编译好,文档到达后直接匹配,不走这套每批重建的流程,差距就在这里。


适用场景

以下场景对规则匹配的吞吐和延迟要求较高,是 Easysearch 在线规则引擎的典型适用范围:

  • 内容审核:规则持续增长且复杂度高,需要稳定的处理吞吐,对单批延迟敏感。
  • 舆情监测:热点词、别名、邻近词组合多,规则天然形成大 OR 结构,是 Percolate Query 最容易触及性能瓶颈的场景。
  • 广告定向:人群包条件不断叠加,文档流量高,规则匹配需要足够轻量,避免影响整条投放链路。
  • 告警规则:延迟直接影响告警有效性,规则命中需要尽量贴近文档写入时刻。
  • 实时反欺诈:规则复杂、变更频繁、吞吐高,要求文档到达后立即完成判断。

小结

在本次 heavy-OR 基准测试中:

  • 相同规则集(15,000 条)和文档量(200,000 条),Easysearch 在线规则引擎全流程耗时 11.68s,Percolate Query 仅搜索阶段耗时 254.30s,相差 21.8 倍
  • 开启规则引擎带来的写入链路增量成本为 5.66s,约为 Percolate Query 搜索阶段耗时的 1/44.9
  • 剔除写入通用开销后,规则匹配引擎本体的差距约为 50 倍

如果你的业务已经有 Percolate Query 延迟随规则增长持续上升的问题,不用看 demo 数据——把你线上最重的那批规则拿出来,跑一次就知道差距在哪。

规则引擎功能当前需要试用 License。你可以先下载 Easysearch:https://infinilabs.cn/download,再联系售前申请试用 License 并获取开通指引。

关于 Easysearch

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

官网文档:https://docs.infinilabs.com/easysearch

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


相关文章:

继续阅读 »

15,000 条 heavy-OR 规则,200,000 条文档,同一台机器:Easysearch 在线规则引擎全流程 11.68 秒,Percolate Query 仅搜索阶段就跑了 254.30 秒——慢了 21.8 倍。

在"规则先存、文档后到"这类场景下,Percolate Query 的延迟会随规则数量和复杂度的增长快速恶化。规则涨到数千条后,每批文档匹配的耗时可以从秒级攀升至几分钟。这类问题换索引参数、调批次大小、精简 DSL,都治标不治本,根子在执行模型本身。

本文通过一组 heavy-OR 基准测试,量化两种方案的实际差距。

测试配置

测试在同一台主机上运行,使用同一套规则文本和文档样本。Percolate Query 的查询条件由相同规则翻译而来,保证两侧规则语义一致。

参数
规则总数 15,000
文档总数 200,000
批次大小 10,000 / 批
重规则数量 2,500 条大 OR 热点规则
单条大 OR 规模 随机 50 ~ 500 个 OR 条件

测试结果

路径 用时
纯写入 plain_bulk 6.025535s
在线规则引擎 rules_only 11.684568s
Percolate Query 搜索阶段 254.304583s

同样 15,000 条规则 + 200,000 条文档

Easysearch 11.68s 在线规则引擎全流程 Percolate Query 254.30s 只算搜索阶段 Percolate Query 比 Easysearch 慢了 21.8 倍 仅搜索阶段就多花 242.62 秒

具体指标:

  • Easysearch 在线规则引擎全流程:11.68s
  • Percolate Query 搜索阶段:254.30s
  • 差值:242.62s
  • 倍数:21.76 倍
  • 每批(10,000 文档)平均耗时:Easysearch 约 0.49s,Percolate Query 约 12.69s

开启规则引擎的增量成本

规则匹配会对写入链路产生多少额外开销,是评估在线规则引擎可行性的重要指标之一。

开启规则引擎的写入增量

纯写入 6.03s plain_bulk 基线 开启规则引擎 11.68s 基线 6.03s + 新增 5.66s 规则引擎新增成本 仅 5.66s Percolate 搜索阶段同期耗时 254.30s

与之对比,Percolate Query 仅搜索阶段就需要 254.30s。换言之,Easysearch 在线规则引擎把规则匹配叠加进写入流程,新增成本约为 Percolate Query 搜索耗时的 1/44.9

只看匹配引擎本体

上一组数据(11.68s vs 254.30s)包含了 Easysearch 的在线写入、bulk 解析和索引处理等通用开销。为了单独衡量规则匹配引擎自身的性能,我们用 Java 直调 JNI 做了一次离线 match,绕过写入链路,只跑规则匹配逻辑。

路径 用时
Easysearch 纯匹配(JNI 离线) 5.046934s
Percolate Query 搜索阶段 254.304583s

只比匹配本身

Easysearch 纯匹配 5.05s Java JNI 离线直调 Percolate Query 254.30s 搜索阶段 只看匹配引擎本体 慢了 50.4 倍 254.30 ÷ 5.05 = 50.39

这组数据说明两点:Easysearch 的性能优势并非来自写入链路的整合效率,即便剔除通用写入成本,规则匹配引擎本体与 Percolate Query 之间依然存在约 50 倍的差距。

为什么 Percolate Query 会慢

根因在执行模型,OR 条件多只是放大器。

每批文档到达时,Percolate Query 都要走完这套流程:

  1. 把文档放进临时内存索引
  2. 基于规则中的 terms 筛选候选规则
  3. 对候选规则逐条验证

以本次测试为例,各阶段耗时分布如下:

  • 规则翻译:9.560294s
  • 规则导入:7.451857s
  • percolate 搜索:254.304583s

搜索阶段是每批文档都必须重新支付的代价。

Heavy-OR 规则在这套流程里两头放大:规则覆盖面广,候选集更难剪掉;单条规则条件多,逐条验证也更重。

Easysearch 规则引擎把规则提前编译好,文档到达后直接匹配,不走这套每批重建的流程,差距就在这里。


适用场景

以下场景对规则匹配的吞吐和延迟要求较高,是 Easysearch 在线规则引擎的典型适用范围:

  • 内容审核:规则持续增长且复杂度高,需要稳定的处理吞吐,对单批延迟敏感。
  • 舆情监测:热点词、别名、邻近词组合多,规则天然形成大 OR 结构,是 Percolate Query 最容易触及性能瓶颈的场景。
  • 广告定向:人群包条件不断叠加,文档流量高,规则匹配需要足够轻量,避免影响整条投放链路。
  • 告警规则:延迟直接影响告警有效性,规则命中需要尽量贴近文档写入时刻。
  • 实时反欺诈:规则复杂、变更频繁、吞吐高,要求文档到达后立即完成判断。

小结

在本次 heavy-OR 基准测试中:

  • 相同规则集(15,000 条)和文档量(200,000 条),Easysearch 在线规则引擎全流程耗时 11.68s,Percolate Query 仅搜索阶段耗时 254.30s,相差 21.8 倍
  • 开启规则引擎带来的写入链路增量成本为 5.66s,约为 Percolate Query 搜索阶段耗时的 1/44.9
  • 剔除写入通用开销后,规则匹配引擎本体的差距约为 50 倍

如果你的业务已经有 Percolate Query 延迟随规则增长持续上升的问题,不用看 demo 数据——把你线上最重的那批规则拿出来,跑一次就知道差距在哪。

规则引擎功能当前需要试用 License。你可以先下载 Easysearch:https://infinilabs.cn/download,再联系售前申请试用 License 并获取开通指引。

关于 Easysearch

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

官网文档:https://docs.infinilabs.com/easysearch

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


相关文章:

收起阅读 »

【搜索客社区日报】第2217期 (2025-04-15)

1.jina-embeddings-v5-text:新的最先进水平小型多语言 embeddings
https://blog.csdn.net/UbuntuTo ... 19125

2.为什么电子商务 search 需要治理
https://blog.csdn.net/UbuntuTo ... 05279

3.使用 Jina-VLM 小型多语言视觉语言模型来和图片对话
https://blog.csdn.net/UbuntuTo ... 96461

4.在DeepSearch中用DeepSeek-R1来做动作决策会更好么?
https://zhuanlan.zhihu.com/p/1911441996985373763

5.亚马逊 OpenSearch 服务的矢量数据库功能详解
https://www.amazonaws.cn/blog- ... ined/

编辑:kin122    
更多资讯:http://news.searchkit.cn
继续阅读 »
1.jina-embeddings-v5-text:新的最先进水平小型多语言 embeddings
https://blog.csdn.net/UbuntuTo ... 19125

2.为什么电子商务 search 需要治理
https://blog.csdn.net/UbuntuTo ... 05279

3.使用 Jina-VLM 小型多语言视觉语言模型来和图片对话
https://blog.csdn.net/UbuntuTo ... 96461

4.在DeepSearch中用DeepSeek-R1来做动作决策会更好么?
https://zhuanlan.zhihu.com/p/1911441996985373763

5.亚马逊 OpenSearch 服务的矢量数据库功能详解
https://www.amazonaws.cn/blog- ... ined/

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

【搜索客社区日报】第2215期 (2026-04-13)

1、如何使用 LogsDB 降低 Elasticsearch 日志存储成本
https://elasticstack.blog.csdn ... 53896

2、使用 Elasticsearch + Jina embeddings 进行无监督文档聚类
https://elasticstack.blog.csdn ... 39667

3、重磅!Anthropic官方Harness发布了!
https://mp.weixin.qq.com/s/66SDrz5_MlBAPwL0xtMFyw

4、「纯干货」几万字都讲不明白的Memory架构与思考
https://mp.weixin.qq.com/s/bl77_Mb85C4AKe8h4__V6Q

5、创业者正在围绕OpenClaw生态做什么产品?
https://mp.weixin.qq.com/s/H2DuoMR3Svoq_djWXAzA3Q

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、如何使用 LogsDB 降低 Elasticsearch 日志存储成本
https://elasticstack.blog.csdn ... 53896

2、使用 Elasticsearch + Jina embeddings 进行无监督文档聚类
https://elasticstack.blog.csdn ... 39667

3、重磅!Anthropic官方Harness发布了!
https://mp.weixin.qq.com/s/66SDrz5_MlBAPwL0xtMFyw

4、「纯干货」几万字都讲不明白的Memory架构与思考
https://mp.weixin.qq.com/s/bl77_Mb85C4AKe8h4__V6Q

5、创业者正在围绕OpenClaw生态做什么产品?
https://mp.weixin.qq.com/s/H2DuoMR3Svoq_djWXAzA3Q

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

【搜索客社区日报】第 2216 期 (2026-04-14)

1. 拿ES管理Agent的记忆,一搞一个不吱声啊(需要梯子)
https://codeburst.io/building- ... b0ec2

2. 妹想到吧,ES 害自带安全预警呢(需要梯子)
https://medium.com/%40abbasmur ... f16eb

3. 听我给你讲讲ES 这么流行的核心原因(需要梯子)
https://medium.com/%40seymadog ... 45fa5

编辑:斯蒂文
更多资讯:[http://news.searchkit.cn](http://news.searchkit.cn/)
继续阅读 »
1. 拿ES管理Agent的记忆,一搞一个不吱声啊(需要梯子)
https://codeburst.io/building- ... b0ec2

2. 妹想到吧,ES 害自带安全预警呢(需要梯子)
https://medium.com/%40abbasmur ... f16eb

3. 听我给你讲讲ES 这么流行的核心原因(需要梯子)
https://medium.com/%40seymadog ... 45fa5

编辑:斯蒂文
更多资讯:[http://news.searchkit.cn](http://news.searchkit.cn/) 收起阅读 »

Easysearch BKD Merge 异常排查实录:最终定位到旧版 GraalVM JIT 运行时

最近一次高并发写入压测中,我们遇到了一个非常诡异的 BKD merge 崩溃。从报错看,很像 Easysearch 2.1.2 在 merge 阶段把 segment 读成了错误状态。典型错误是这样的:

java.lang.ArrayIndexOutOfBoundsException: Index -3 out of bounds for length 8
java.lang.ArrayIndexOutOfBoundsException: Index -4 out of bounds for length 8

异常栈最终落在 Lucene BKD 相关路径上:

  • BKDReader.readNodeData()
  • BKDWriter.merge()
  • Lucene90PointsWriter.merge()

如果只看栈,很容易把问题归到 Easysearch 的 BKD merge 逻辑。但排查到最后,结论恰恰相反。

问题不在 Easysearch 的代码,而在 JDK 运行时。 更精确地说,是某个特定 Oracle GraalVM 21 构建中的 JVMCI/Graal JIT 路径,把 Lucene BKD 的热点代码执行错了。

1、为什么这个问题难查

它有几个特别迷惑人的特征:

  • 只在高并发写入压测下触发
  • 服务重启后的前几轮最容易复现
  • 同一进程里,删了索引重新压,后面复现率反而下降
  • 不是固定字段,多个数字类型字段都中过招
  • ZSTDbest_compression 两种 codec 下都能复现

实际命中过的字段包括 @timestampsizestatus_seq_no。所以这不是某个字段、某种 codec 或某个 mapping 的偶发问题。

2、第一层排除:merge reader 不是第一现场

一开始我们确实怀疑 merge reader,毕竟异常直接出现在 merge 路径上。但日志顺序很快给出了相反的证据。在 merge 真正崩溃之前,source segment 已经先出现了这些异常信号:

  1. point-sort-restore-multiple-zero-ords
  2. source-write-point-doc-mismatch
  3. pointCount > docCount
  4. pack-index-negative-code
  5. reader-invalid-start-pos
  6. 最后才是 ArrayIndexOutOfBoundsException

这意味着两件事:merge reader 不是第一现场,source segment 在写出阶段就已经坏了。merge reader 只是读到了已经损坏的 BKD index,并在那个阶段暴露了异常。

3、第二层排除:Easysearch 自己的 BKD 写入逻辑也没有先出错

继续往前追溯,我们发现问题比 OneDimensionBKDWriter.add() 还要早。真正的异常出现在排序/回填链路上:

  • PointValuesWriter
  • MutablePointTreeReaderUtils.sort()
  • StableMSBRadixSorter

关键证据来自两个探针:

  • point-sort-restore-multiple-zero-ords
  • unwrittenSlotCount == source-write-point-doc-mismatch delta

这说明在某次排序/回填过程中,有一部分槽位根本没有被写入,默认值 0 被 restore 回填到 ords[],再通过 docIDs[0] 放大成大量 docID=0,最终导致 pointCount > docCount,source segment 进入错误状态。

到这一步,排查重点已经不是“Easysearch 的 BKD merge 逻辑存在缺陷”,而是 Lucene points 排序链路的执行结果和源码语义不一致

4、真正的转折点:抓到了 reorder() 自身的 coverage 异常

真正把方向扭转过来的,不是又一次复现,而是一个更早的探针:

  • point-sort-reorder-coverage-mismatch

这个探针验证的是:StableMSBRadixSorter.reorder() 是否真的按源码应有的次数完整执行。

我们抓到的典型样本之一如下:

  • targetSegment=_x
  • field=status
  • k=7
  • expectedLoopCount=9800
  • actualIterationCount=8204
  • firstCoverageMismatchBucket=201
  • firstCoverageExpected=9788
  • firstCoverageActual=8192

更关键的是,同一条日志里还带出了这个信息:

skippedSourceSamples=[201:[{ord=8192,bucket=201,docID=9090,byteAtK=200}, ...]]

这条信息非常重要,因为它说明:bucket 201 理论上应该处理 9788 条,实际只处理了前 8192 条,但从 ord=8192 往后的样本,读出来仍然还是 bucket=201。这直接推翻了“后半段数据被污染后改桶”的旧解释,指向了一个更直接的结论:reorder() 自己的 coverage 被截断了

另一个样本中出现了同类边界:firstCoverageExpected=31822firstCoverageActual=16384

到这里,一个很不自然的特征浮现出来:819216384——这些明显的 2 的幂边界,更像是运行时或 JIT 执行异常,而不是普通业务逻辑 bug。

5、哪段代码最可疑

此时怀疑对象已经不是泛泛的“BKD 整体有问题”,而是 Lucene 中的这段热点循环:

for (int i = 0; i < HISTOGRAM_SIZE; ++i) {
  final int limit = endOffsets[i];
  for (int h1 = fixedStartOffsets[i]; h1 < limit; h1++) {
    final int b = getBucket(from + h1, k);
    final int h2 = startOffsets[b]++;
    save(from + h1, from + h2);
  }
}
restore(from, to);

代码位于 org.apache.lucene.util.StableMSBRadixSorter#reorder(...)

按源码语义,这段代码应该完整扫描每个 bucket 的范围,并最终把全部结果 restore 回去。但我们抓到的事实是:expectedLoopCount != actualIterationCount,某些 bucket 只跑到 8192 / 16384 就停了,随后出现未写槽位,restore 把默认 0 回填,最终 source segment 进入错误状态。

如果这是 Java 源码本身的稳定逻辑 bug,它在解释执行时也应该稳定触发,而不应该强烈依赖某个 JDK/JIT 组合。后面的 JVM 对照实验基本排除了这个可能性。

6、最强证据:只换 JDK / JIT 路径,结果就变了

这次排查中最有说服力的,不是某一条日志,而是对照实验。

基线组:旧版 Oracle GraalVM 21,默认 JVMCI/Graal JIT

环境:

  • Oracle GraalVM 21+35.1
  • 21+35-jvmci-23.1-b15
  • Linux aarch64 / ARM64
  • UseJVMCICompiler = true

结果:很快复现,命中了 point-sort-reorder-coverage-mismatchpoint-sort-reorder-underfilledpoint-sort-restore-multiple-zero-ords,随后 merge 报 ArrayIndexOutOfBoundsException: Index -4 out of bounds for length 8

对照组:关闭 JVMCI/Graal JIT 或纯解释执行

只改 JVM 参数,不改代码和压测口径:

  • -XX:-UseJVMCICompiler
  • -Xint

结果一致:都没有再出现上述探针和异常。

这三组对照的意义很直接:如果这是 Easysearch 或 Lucene 的纯 Java 逻辑 bug,解释执行也应该能稳定复现。但现实是基线组复现,关闭 JVMCI 和纯解释执行都不复现。问题显然高度依赖 JIT 路径。

版本对照:较新的 GraalVM 21 构建在当前测试中未复现

这里需要补充一条重要的边界条件。我们后来又测试了一个较新的 GraalVM 版本:

java version "21.0.9" 2025-10-21 LTS
Java(TM) SE Runtime Environment Oracle GraalVM 21.0.9+7.1 (build 21.0.9+7-LTS-jvmci-23.1-b79)

在当前压测中,这个版本没有再出现 merge 错误。

因此结论必须写得更精确:已知会复现的是较早的 21+35-jvmci-23.1-b15,已知在当前测试中未复现的是较新的 21.0.9+7-LTS-jvmci-23.1-b79。更准确的工程判断不是“GraalVM 21 整体都有问题”,而是某个特定 GraalVM 21 构建有问题,较新的构建很可能已经修复或规避了该问题。这里仍需保持严谨:只能说“在当前压测中未复现”,还不能直接说“已经被完整证明没有问题”。

平台边界:不能写成 ARM 专属

除了前面详细展开的 Linux aarch64 / ARM64 主要实验环境外,有用户反馈在以下环境中也出现过同类问题:

  • 操作系统:openEuler
  • 内核:4.19.90-2112.8.0.0131.oe1.x86_64
  • 架构:x86_64

这是用户的测试环境,不是我们能够独立完整复现并逐项展开的。但这条信息已经足够说明:当前不能把问题简单写成“ARM 平台专属”。更准确的说法是:我们在 ARM64 上系统性复现并完成了主要对照实验,另外也有 openEuler x86_64 测试环境的同类现象反馈,因此平台边界目前还没有被完全钉死。

7、更强的同机对照:换成 Oracle HotSpot 21.0.10 后,全量写入跑完也没有问题

为了进一步排除“是不是所有 Java 21 都会这样”,我们在同一台服务器上把 /infini/easysearch/jdkOracle GraalVM 21 换成普通 Oracle HotSpot 21.0.10,恢复默认 JVM 参数,用同样的写入压测继续验证。

其中一轮的结果很有说服力:

  • 索引:nginx_zstd3_40mt4
  • codec:ZSTD
  • threads=16
  • bulk_size=1000
  • target_docs=181463624

最终 after_count=181463624delta_written=181463624,全量文档写入完成,服务端没有出现任何 BKD merge 错误。

这条结果至少说明:同一台机器、同一套 Easysearch、同样的数据规模和写入模型,只要把 JDK 从 Oracle GraalVM 21 换成 Oracle HotSpot 21.0.10,问题就不再出现。

到这一步,工程判断已经比较清晰了:不是 Easysearch 自身逻辑导致,也不是所有 Oracle JDK 21 都会出错,更像是特定 Oracle GraalVM 21 构建相关的 JVMCI/Graal JIT 路径问题。

8、最关键的外部对照:Elasticsearch 8.19.5 也复现了

如果说前面的结论还能被质疑为“Easysearch 某些实现差异触发的”,那么后面的外部对照基本排除了这个方向。

我们在同一台服务器上部署了 Elasticsearch 8.19.5(Lucene 9.12.2),JDK 也切到相同的 Oracle GraalVM 21,执行同类写入压测。结果 Elasticsearch 也复现了同样的 BKD merge 崩溃。

关键异常完全一致:

java.lang.ArrayIndexOutOfBoundsException: Index -4 out of bounds for length 8

栈也一样落在 BKDReader.readNodeDataBKDWriter$MergeReader.collectNextLeafBKDWriter$MergeReader.next

这条证据的力度很强:不是 Easysearch 独有的问题,不是当前这套 Lucene 代码路径独有的问题,Elasticsearch 8.19.5 + Lucene 9.12.2 在同类 GraalVM 21 环境下也会出现同类异常。到这一步,再把问题归因于 Easysearch 本身的代码逻辑,已经缺乏依据了。

9、这次排查最终说明了什么

把整条证据链串起来,当前阶段的结论已经比较清楚。

已验证的事实:

  • 问题不是 merge reader 先制造坏数据,source segment 在更早阶段就已经进入错误状态
  • 不是单字段问题,也不是 ZSTDbest_compression 专属
  • 已抓到 StableMSBRadixSorter.reorder() 自身的 coverage 异常
  • 关闭 UseJVMCICompiler 后问题不复现,-Xint 下也不复现
  • 同机切到 Oracle HotSpot 21.0.10 后,Easysearch 全量写入跑完未见 BKD merge 异常
  • Elasticsearch 8.19.5 + Lucene 9.12.2 在同类 GraalVM 21 环境下也复现
  • 较新的 21.0.9+7-LTS-jvmci-23.1-b79 在当前压测中未复现
  • 某用户的 openEuler x86_64 测试环境中也出现过同类错误,因此不能写成 ARM 专属

工程结论:

从工程证据来看,Easysearch 本身的代码逻辑没有问题

当前最符合事实的结论是:问题高度相关于特定 Oracle GraalVM 21 构建,更具体地,是该构建相关的 JVMCI/Graal JIT 路径。它把 Lucene BKD 相关热点代码执行到了错误状态。已知较早构建 21+35-jvmci-23.1-b15 可复现,已知较新的 21.0.9+7-LTS-jvmci-23.1-b79 在当前测试中未复现。平台边界目前尚未完全钉死,不能再简单写成仅限 ARM64

换句话说,这不是“Easysearch 的 BKD merge 实现有 bug”,而是特定 JDK/JIT 运行时把本来正确的 Lucene BKD 代码执行错了

10、建议版本与规避方案

如果你在生产或测试环境中运行 Easysearch 或 Elasticsearch,并且使用的是某些 Oracle GraalVM 21 构建,且启用了默认的 JVMCI/Graal JIT,那么在高并发写入、频繁 merge、BKD 热点路径被充分打热的场景下,需要特别警惕这类问题。

现阶段比较明确的建议是:

  1. 避免继续使用已经验证可复现的旧版构建Oracle GraalVM 21+35.121+35-jvmci-23.1-b15
  2. 优先升级到当前测试中未复现的版本Oracle GraalVM 21.0.9+7.1(即 21.0.9+7-LTS-jvmci-23.1-b79
  3. 如果短期内不方便升级 GraalVM,直接切换到普通 Oracle HotSpot 21.0.10

直接落到版本号上会更清晰:

  • 已确认应避开:21+35-jvmci-23.1-b15
  • 当前更推荐:21.0.9+7-LTS-jvmci-23.1-b79

原因很简单:前者我们已经复现了,后者在当前压测中没有复现。当然,这里的“推荐”是基于当前测试结果,不代表上游已经正式确认该问题已被修复。

11、最后

这次排查最大的价值,不是“又复现了一次 BKD merge 崩溃”,而是把一个看起来像 Easysearch 代码 bug 的现象,收敛成了一个有明确边界的运行时问题。

它至少说明两件事:

  • 栈顶报错的位置不一定是真正的第一现场
  • 真正有说服力的不是猜测,而是对照实验

这次结论之所以成立,不是因为主观判断,而是因为我们已经拿到了足够强的工程证据:同机 HotSpot 不复现,关闭 JVMCI 不复现,解释执行不复现,Elasticsearch 也复现,较新的 GraalVM 21.0.9+7.1 在当前测试中未复现,且某用户的 openEuler x86_64 测试环境也出现过同类错误。

所以,这一次,问题确实不在 Easysearch,而在特定版本的 JDK/JIT 运行时。


关于 Easysearch

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

官网文档:https://docs.infinilabs.com/easysearch

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


相关文章:

继续阅读 »

最近一次高并发写入压测中,我们遇到了一个非常诡异的 BKD merge 崩溃。从报错看,很像 Easysearch 2.1.2 在 merge 阶段把 segment 读成了错误状态。典型错误是这样的:

java.lang.ArrayIndexOutOfBoundsException: Index -3 out of bounds for length 8
java.lang.ArrayIndexOutOfBoundsException: Index -4 out of bounds for length 8

异常栈最终落在 Lucene BKD 相关路径上:

  • BKDReader.readNodeData()
  • BKDWriter.merge()
  • Lucene90PointsWriter.merge()

如果只看栈,很容易把问题归到 Easysearch 的 BKD merge 逻辑。但排查到最后,结论恰恰相反。

问题不在 Easysearch 的代码,而在 JDK 运行时。 更精确地说,是某个特定 Oracle GraalVM 21 构建中的 JVMCI/Graal JIT 路径,把 Lucene BKD 的热点代码执行错了。

1、为什么这个问题难查

它有几个特别迷惑人的特征:

  • 只在高并发写入压测下触发
  • 服务重启后的前几轮最容易复现
  • 同一进程里,删了索引重新压,后面复现率反而下降
  • 不是固定字段,多个数字类型字段都中过招
  • ZSTDbest_compression 两种 codec 下都能复现

实际命中过的字段包括 @timestampsizestatus_seq_no。所以这不是某个字段、某种 codec 或某个 mapping 的偶发问题。

2、第一层排除:merge reader 不是第一现场

一开始我们确实怀疑 merge reader,毕竟异常直接出现在 merge 路径上。但日志顺序很快给出了相反的证据。在 merge 真正崩溃之前,source segment 已经先出现了这些异常信号:

  1. point-sort-restore-multiple-zero-ords
  2. source-write-point-doc-mismatch
  3. pointCount > docCount
  4. pack-index-negative-code
  5. reader-invalid-start-pos
  6. 最后才是 ArrayIndexOutOfBoundsException

这意味着两件事:merge reader 不是第一现场,source segment 在写出阶段就已经坏了。merge reader 只是读到了已经损坏的 BKD index,并在那个阶段暴露了异常。

3、第二层排除:Easysearch 自己的 BKD 写入逻辑也没有先出错

继续往前追溯,我们发现问题比 OneDimensionBKDWriter.add() 还要早。真正的异常出现在排序/回填链路上:

  • PointValuesWriter
  • MutablePointTreeReaderUtils.sort()
  • StableMSBRadixSorter

关键证据来自两个探针:

  • point-sort-restore-multiple-zero-ords
  • unwrittenSlotCount == source-write-point-doc-mismatch delta

这说明在某次排序/回填过程中,有一部分槽位根本没有被写入,默认值 0 被 restore 回填到 ords[],再通过 docIDs[0] 放大成大量 docID=0,最终导致 pointCount > docCount,source segment 进入错误状态。

到这一步,排查重点已经不是“Easysearch 的 BKD merge 逻辑存在缺陷”,而是 Lucene points 排序链路的执行结果和源码语义不一致

4、真正的转折点:抓到了 reorder() 自身的 coverage 异常

真正把方向扭转过来的,不是又一次复现,而是一个更早的探针:

  • point-sort-reorder-coverage-mismatch

这个探针验证的是:StableMSBRadixSorter.reorder() 是否真的按源码应有的次数完整执行。

我们抓到的典型样本之一如下:

  • targetSegment=_x
  • field=status
  • k=7
  • expectedLoopCount=9800
  • actualIterationCount=8204
  • firstCoverageMismatchBucket=201
  • firstCoverageExpected=9788
  • firstCoverageActual=8192

更关键的是,同一条日志里还带出了这个信息:

skippedSourceSamples=[201:[{ord=8192,bucket=201,docID=9090,byteAtK=200}, ...]]

这条信息非常重要,因为它说明:bucket 201 理论上应该处理 9788 条,实际只处理了前 8192 条,但从 ord=8192 往后的样本,读出来仍然还是 bucket=201。这直接推翻了“后半段数据被污染后改桶”的旧解释,指向了一个更直接的结论:reorder() 自己的 coverage 被截断了

另一个样本中出现了同类边界:firstCoverageExpected=31822firstCoverageActual=16384

到这里,一个很不自然的特征浮现出来:819216384——这些明显的 2 的幂边界,更像是运行时或 JIT 执行异常,而不是普通业务逻辑 bug。

5、哪段代码最可疑

此时怀疑对象已经不是泛泛的“BKD 整体有问题”,而是 Lucene 中的这段热点循环:

for (int i = 0; i < HISTOGRAM_SIZE; ++i) {
  final int limit = endOffsets[i];
  for (int h1 = fixedStartOffsets[i]; h1 < limit; h1++) {
    final int b = getBucket(from + h1, k);
    final int h2 = startOffsets[b]++;
    save(from + h1, from + h2);
  }
}
restore(from, to);

代码位于 org.apache.lucene.util.StableMSBRadixSorter#reorder(...)

按源码语义,这段代码应该完整扫描每个 bucket 的范围,并最终把全部结果 restore 回去。但我们抓到的事实是:expectedLoopCount != actualIterationCount,某些 bucket 只跑到 8192 / 16384 就停了,随后出现未写槽位,restore 把默认 0 回填,最终 source segment 进入错误状态。

如果这是 Java 源码本身的稳定逻辑 bug,它在解释执行时也应该稳定触发,而不应该强烈依赖某个 JDK/JIT 组合。后面的 JVM 对照实验基本排除了这个可能性。

6、最强证据:只换 JDK / JIT 路径,结果就变了

这次排查中最有说服力的,不是某一条日志,而是对照实验。

基线组:旧版 Oracle GraalVM 21,默认 JVMCI/Graal JIT

环境:

  • Oracle GraalVM 21+35.1
  • 21+35-jvmci-23.1-b15
  • Linux aarch64 / ARM64
  • UseJVMCICompiler = true

结果:很快复现,命中了 point-sort-reorder-coverage-mismatchpoint-sort-reorder-underfilledpoint-sort-restore-multiple-zero-ords,随后 merge 报 ArrayIndexOutOfBoundsException: Index -4 out of bounds for length 8

对照组:关闭 JVMCI/Graal JIT 或纯解释执行

只改 JVM 参数,不改代码和压测口径:

  • -XX:-UseJVMCICompiler
  • -Xint

结果一致:都没有再出现上述探针和异常。

这三组对照的意义很直接:如果这是 Easysearch 或 Lucene 的纯 Java 逻辑 bug,解释执行也应该能稳定复现。但现实是基线组复现,关闭 JVMCI 和纯解释执行都不复现。问题显然高度依赖 JIT 路径。

版本对照:较新的 GraalVM 21 构建在当前测试中未复现

这里需要补充一条重要的边界条件。我们后来又测试了一个较新的 GraalVM 版本:

java version "21.0.9" 2025-10-21 LTS
Java(TM) SE Runtime Environment Oracle GraalVM 21.0.9+7.1 (build 21.0.9+7-LTS-jvmci-23.1-b79)

在当前压测中,这个版本没有再出现 merge 错误。

因此结论必须写得更精确:已知会复现的是较早的 21+35-jvmci-23.1-b15,已知在当前测试中未复现的是较新的 21.0.9+7-LTS-jvmci-23.1-b79。更准确的工程判断不是“GraalVM 21 整体都有问题”,而是某个特定 GraalVM 21 构建有问题,较新的构建很可能已经修复或规避了该问题。这里仍需保持严谨:只能说“在当前压测中未复现”,还不能直接说“已经被完整证明没有问题”。

平台边界:不能写成 ARM 专属

除了前面详细展开的 Linux aarch64 / ARM64 主要实验环境外,有用户反馈在以下环境中也出现过同类问题:

  • 操作系统:openEuler
  • 内核:4.19.90-2112.8.0.0131.oe1.x86_64
  • 架构:x86_64

这是用户的测试环境,不是我们能够独立完整复现并逐项展开的。但这条信息已经足够说明:当前不能把问题简单写成“ARM 平台专属”。更准确的说法是:我们在 ARM64 上系统性复现并完成了主要对照实验,另外也有 openEuler x86_64 测试环境的同类现象反馈,因此平台边界目前还没有被完全钉死。

7、更强的同机对照:换成 Oracle HotSpot 21.0.10 后,全量写入跑完也没有问题

为了进一步排除“是不是所有 Java 21 都会这样”,我们在同一台服务器上把 /infini/easysearch/jdkOracle GraalVM 21 换成普通 Oracle HotSpot 21.0.10,恢复默认 JVM 参数,用同样的写入压测继续验证。

其中一轮的结果很有说服力:

  • 索引:nginx_zstd3_40mt4
  • codec:ZSTD
  • threads=16
  • bulk_size=1000
  • target_docs=181463624

最终 after_count=181463624delta_written=181463624,全量文档写入完成,服务端没有出现任何 BKD merge 错误。

这条结果至少说明:同一台机器、同一套 Easysearch、同样的数据规模和写入模型,只要把 JDK 从 Oracle GraalVM 21 换成 Oracle HotSpot 21.0.10,问题就不再出现。

到这一步,工程判断已经比较清晰了:不是 Easysearch 自身逻辑导致,也不是所有 Oracle JDK 21 都会出错,更像是特定 Oracle GraalVM 21 构建相关的 JVMCI/Graal JIT 路径问题。

8、最关键的外部对照:Elasticsearch 8.19.5 也复现了

如果说前面的结论还能被质疑为“Easysearch 某些实现差异触发的”,那么后面的外部对照基本排除了这个方向。

我们在同一台服务器上部署了 Elasticsearch 8.19.5(Lucene 9.12.2),JDK 也切到相同的 Oracle GraalVM 21,执行同类写入压测。结果 Elasticsearch 也复现了同样的 BKD merge 崩溃。

关键异常完全一致:

java.lang.ArrayIndexOutOfBoundsException: Index -4 out of bounds for length 8

栈也一样落在 BKDReader.readNodeDataBKDWriter$MergeReader.collectNextLeafBKDWriter$MergeReader.next

这条证据的力度很强:不是 Easysearch 独有的问题,不是当前这套 Lucene 代码路径独有的问题,Elasticsearch 8.19.5 + Lucene 9.12.2 在同类 GraalVM 21 环境下也会出现同类异常。到这一步,再把问题归因于 Easysearch 本身的代码逻辑,已经缺乏依据了。

9、这次排查最终说明了什么

把整条证据链串起来,当前阶段的结论已经比较清楚。

已验证的事实:

  • 问题不是 merge reader 先制造坏数据,source segment 在更早阶段就已经进入错误状态
  • 不是单字段问题,也不是 ZSTDbest_compression 专属
  • 已抓到 StableMSBRadixSorter.reorder() 自身的 coverage 异常
  • 关闭 UseJVMCICompiler 后问题不复现,-Xint 下也不复现
  • 同机切到 Oracle HotSpot 21.0.10 后,Easysearch 全量写入跑完未见 BKD merge 异常
  • Elasticsearch 8.19.5 + Lucene 9.12.2 在同类 GraalVM 21 环境下也复现
  • 较新的 21.0.9+7-LTS-jvmci-23.1-b79 在当前压测中未复现
  • 某用户的 openEuler x86_64 测试环境中也出现过同类错误,因此不能写成 ARM 专属

工程结论:

从工程证据来看,Easysearch 本身的代码逻辑没有问题

当前最符合事实的结论是:问题高度相关于特定 Oracle GraalVM 21 构建,更具体地,是该构建相关的 JVMCI/Graal JIT 路径。它把 Lucene BKD 相关热点代码执行到了错误状态。已知较早构建 21+35-jvmci-23.1-b15 可复现,已知较新的 21.0.9+7-LTS-jvmci-23.1-b79 在当前测试中未复现。平台边界目前尚未完全钉死,不能再简单写成仅限 ARM64

换句话说,这不是“Easysearch 的 BKD merge 实现有 bug”,而是特定 JDK/JIT 运行时把本来正确的 Lucene BKD 代码执行错了

10、建议版本与规避方案

如果你在生产或测试环境中运行 Easysearch 或 Elasticsearch,并且使用的是某些 Oracle GraalVM 21 构建,且启用了默认的 JVMCI/Graal JIT,那么在高并发写入、频繁 merge、BKD 热点路径被充分打热的场景下,需要特别警惕这类问题。

现阶段比较明确的建议是:

  1. 避免继续使用已经验证可复现的旧版构建Oracle GraalVM 21+35.121+35-jvmci-23.1-b15
  2. 优先升级到当前测试中未复现的版本Oracle GraalVM 21.0.9+7.1(即 21.0.9+7-LTS-jvmci-23.1-b79
  3. 如果短期内不方便升级 GraalVM,直接切换到普通 Oracle HotSpot 21.0.10

直接落到版本号上会更清晰:

  • 已确认应避开:21+35-jvmci-23.1-b15
  • 当前更推荐:21.0.9+7-LTS-jvmci-23.1-b79

原因很简单:前者我们已经复现了,后者在当前压测中没有复现。当然,这里的“推荐”是基于当前测试结果,不代表上游已经正式确认该问题已被修复。

11、最后

这次排查最大的价值,不是“又复现了一次 BKD merge 崩溃”,而是把一个看起来像 Easysearch 代码 bug 的现象,收敛成了一个有明确边界的运行时问题。

它至少说明两件事:

  • 栈顶报错的位置不一定是真正的第一现场
  • 真正有说服力的不是猜测,而是对照实验

这次结论之所以成立,不是因为主观判断,而是因为我们已经拿到了足够强的工程证据:同机 HotSpot 不复现,关闭 JVMCI 不复现,解释执行不复现,Elasticsearch 也复现,较新的 GraalVM 21.0.9+7.1 在当前测试中未复现,且某用户的 openEuler x86_64 测试环境也出现过同类错误。

所以,这一次,问题确实不在 Easysearch,而在特定版本的 JDK/JIT 运行时。


关于 Easysearch

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

官网文档:https://docs.infinilabs.com/easysearch

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


相关文章:

收起阅读 »

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

1、从 OpenClaw 看 Agent 架构设计
https://my.oschina.net/vivotech/blog/19554828

2、Easysearch 接上 Kibana,就这两步,搞定!
https://mp.weixin.qq.com/s/X4K5U8IY7B067zGfgmtyeg

3、Mem0 + Elasticsearch:构建 AI 记忆系统阿里云大数据 AI 平台
https://mp.weixin.qq.com/s/m5uVtghIN8kcJ370JvWgug

4、Easysearch BKD Merge 异常排查实录:最终定位到旧版 GraalVM JIT 运行时
https://infinilabs.cn/blog/202 ... -jit/

5、Easysearch 分词是如何影响搜索结果的
https://easysearch.cn/knowledg ... ults/
继续阅读 »
1、从 OpenClaw 看 Agent 架构设计
https://my.oschina.net/vivotech/blog/19554828

2、Easysearch 接上 Kibana,就这两步,搞定!
https://mp.weixin.qq.com/s/X4K5U8IY7B067zGfgmtyeg

3、Mem0 + Elasticsearch:构建 AI 记忆系统阿里云大数据 AI 平台
https://mp.weixin.qq.com/s/m5uVtghIN8kcJ370JvWgug

4、Easysearch BKD Merge 异常排查实录:最终定位到旧版 GraalVM JIT 运行时
https://infinilabs.cn/blog/202 ... -jit/

5、Easysearch 分词是如何影响搜索结果的
https://easysearch.cn/knowledg ... ults/ 收起阅读 »

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

1.Karpathy 亲手终结了RAG的草莽时代
https://mp.weixin.qq.com/s/y0JLrC_Af9X0cA_t08ymjg
2.Hermes Agent: 自我改进的 Agent
https://hermes-agent.nousresearch.com/docs
3.基于 HiClaw 的运维场景多智能体协同实践
https://mp.weixin.qq.com/s/w8s0lA9DgvLsJkDQ3AgjHw

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.Karpathy 亲手终结了RAG的草莽时代
https://mp.weixin.qq.com/s/y0JLrC_Af9X0cA_t08ymjg
2.Hermes Agent: 自我改进的 Agent
https://hermes-agent.nousresearch.com/docs
3.基于 HiClaw 的运维场景多智能体协同实践
https://mp.weixin.qq.com/s/w8s0lA9DgvLsJkDQ3AgjHw

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

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

1.RAG进化了,深扒Claude Code源码中RAG高级技巧
https://mp.weixin.qq.com/s/qV1wFqWLCM1HrB5AN3_ZAg

2.Elasticsearch 实战 | (50TB的代价)ES用了这么久,你知道 forcemerge + 快照同时跑会发生什么吗?
https://mp.weixin.qq.com/s/PDYNtjHy2XNRrZQ2Vt59CQ

3.如何比较两个 Elasticsearch 索引并找出缺失的文档
https://elasticstack.blog.csdn ... 04109

4.超越向量搜索:使用 Ladybug 和 Icebug 在 Rust 中构建混合图 RAG 引擎(搭梯)
https://ai.plainenglish.io/bey ... 15dcb

5.Agent Skills: 让 AI Agents 真正成为你队友的一些方法(搭梯)
https://medium.com/ai-in-plain ... 37fe3

编辑:kin122    
更多资讯:http://news.searchkit.cn
继续阅读 »
1.RAG进化了,深扒Claude Code源码中RAG高级技巧
https://mp.weixin.qq.com/s/qV1wFqWLCM1HrB5AN3_ZAg

2.Elasticsearch 实战 | (50TB的代价)ES用了这么久,你知道 forcemerge + 快照同时跑会发生什么吗?
https://mp.weixin.qq.com/s/PDYNtjHy2XNRrZQ2Vt59CQ

3.如何比较两个 Elasticsearch 索引并找出缺失的文档
https://elasticstack.blog.csdn ... 04109

4.超越向量搜索:使用 Ladybug 和 Icebug 在 Rust 中构建混合图 RAG 引擎(搭梯)
https://ai.plainenglish.io/bey ... 15dcb

5.Agent Skills: 让 AI Agents 真正成为你队友的一些方法(搭梯)
https://medium.com/ai-in-plain ... 37fe3

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

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

1. 使用 Azure SRE Agent 和 Elasticsearch 提升 SRE 生产力
https://elasticstack.blog.csdn ... 56466

2. 腾讯 QClaw 实测体验:微信一发指令,本地 AI “小龙虾”帮你高效干活
https://cloud.tencent.com/deve ... 39891

3. 别再手动录发票了!用腾讯龙虾Skills,让财务提前 2 小时下班
https://cloud.tencent.com/deve ... 39669

4. 如何将 Elasticsearch MCP 与 OpenClaw 集成(搭梯)
https://composio.dev/toolkits/ ... nclaw

5. 使用OpenClaw与Elasticsearch实现智能数据操作与分析
https://devpress.csdn.net/xcla ... .html



编辑:kin122    
更多资讯:http://news.searchkit.cn
继续阅读 »
1. 使用 Azure SRE Agent 和 Elasticsearch 提升 SRE 生产力
https://elasticstack.blog.csdn ... 56466

2. 腾讯 QClaw 实测体验:微信一发指令,本地 AI “小龙虾”帮你高效干活
https://cloud.tencent.com/deve ... 39891

3. 别再手动录发票了!用腾讯龙虾Skills,让财务提前 2 小时下班
https://cloud.tencent.com/deve ... 39669

4. 如何将 Elasticsearch MCP 与 OpenClaw 集成(搭梯)
https://composio.dev/toolkits/ ... nclaw

5. 使用OpenClaw与Elasticsearch实现智能数据操作与分析
https://devpress.csdn.net/xcla ... .html



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

【搜索客社区日报】第 2211 期 (2026-04-07)

1. Wazuh 每日快照监控自动化:带邮件告警(需要梯子)
https://medium.com/%40kevitdak ... fc99f
2. 家庭 SOC 自动化实验室:部署 Wazuh、TheHive 和 Elasticsearch(需要梯子)
https://medium.com/%40irasnura ... 541b4
 
3. Splunk vs Elastic:哪个 SIEM 适合你的组织?(需要梯子)
https://medium.com/%40andresmo ... 15a6d
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »
1. Wazuh 每日快照监控自动化:带邮件告警(需要梯子)
https://medium.com/%40kevitdak ... fc99f
2. 家庭 SOC 自动化实验室:部署 Wazuh、TheHive 和 Elasticsearch(需要梯子)
https://medium.com/%40irasnura ... 541b4
 
3. Splunk vs Elastic:哪个 SIEM 适合你的组织?(需要梯子)
https://medium.com/%40andresmo ... 15a6d
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
  收起阅读 »

【搜索客社区日报】第2210期 (2026-04-06)

1. 使用 Elastic Workflows 监控 Kibana 仪表板视图
https://elasticstack.blog.csdn ... 33281

2. 使用 OpenTelemetry 和 Elastic 的 ML 和 AI Ops 可观测性
https://elasticstack.blog.csdn ... 70220

3. LINQ 到 ES|QL:使用 C# 查询 Elasticsearch
https://elasticstack.blog.csdn ... 56471

4. 从判断列表到训练好的 Learning to Rank( LTR )模型
https://elasticstack.blog.csdn ... 09683

5. 2026 年 AI 编码的“渐进式 Spec”实战指南
https://mp.weixin.qq.com/s/7Lgb3GfgXKI0J9L9e9sq0w

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1. 使用 Elastic Workflows 监控 Kibana 仪表板视图
https://elasticstack.blog.csdn ... 33281

2. 使用 OpenTelemetry 和 Elastic 的 ML 和 AI Ops 可观测性
https://elasticstack.blog.csdn ... 70220

3. LINQ 到 ES|QL:使用 C# 查询 Elasticsearch
https://elasticstack.blog.csdn ... 56471

4. 从判断列表到训练好的 Learning to Rank( LTR )模型
https://elasticstack.blog.csdn ... 09683

5. 2026 年 AI 编码的“渐进式 Spec”实战指南
https://mp.weixin.qq.com/s/7Lgb3GfgXKI0J9L9e9sq0w

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

​【搜索客社区日报】第2209期 (2025-04-01)


1.从 Elasticsearch runtime fields 到 ES|QL:将传统工具适配到当前技术
https://elasticstack.blog.csdn ... 71274

2.jina-embeddings-v5-text:0.6B 参数下最好的多语言向量模型
https://mp.weixin.qq.com/s/4XjiKkpL6zngTgMeJRqqOw

3.从多模态大模型中「拆」出音频向量模型
https://mp.weixin.qq.com/s/1tXMlmEryuVnWXA0jqQlpQ

4.从向量里逆向出原始文本和模型来源
https://mp.weixin.qq.com/s/gnkFTscJ1kbB_Qzv-UWWIA

5.手把手教学:使用 n8n 和 Jina AI 进行网页抓取——自动化(搭梯)
https://medium.com/%40hidayahr ... 7adbb

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

1.从 Elasticsearch runtime fields 到 ES|QL:将传统工具适配到当前技术
https://elasticstack.blog.csdn ... 71274

2.jina-embeddings-v5-text:0.6B 参数下最好的多语言向量模型
https://mp.weixin.qq.com/s/4XjiKkpL6zngTgMeJRqqOw

3.从多模态大模型中「拆」出音频向量模型
https://mp.weixin.qq.com/s/1tXMlmEryuVnWXA0jqQlpQ

4.从向量里逆向出原始文本和模型来源
https://mp.weixin.qq.com/s/gnkFTscJ1kbB_Qzv-UWWIA

5.手把手教学:使用 n8n 和 Jina AI 进行网页抓取——自动化(搭梯)
https://medium.com/%40hidayahr ... 7adbb

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

【搜索客社区日报】第2208期 (2026-03-31)


1. OpenSearch 没有故障,只是返回了空结果,何意味?(需要梯子)
https://medium.com/%40shiki655 ... fa91e

2. 从 ClickHouse + Elasticsearch 到 Apache Doris:快手如何统一万亿级广告分析(需要梯子)
https://medium.com/%40VeloDB_p ... 1513d

3. 案例详解生产级RAG的构建实录(需要梯子)
https://blog.devops.dev/buildi ... cc0d3

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
Detailed case explanation of the construction record of production-grade RAG (requires ladder) https://blog.devops.dev/buildi ... cc0d3 Editor: Steven More information: http://news.searchkit.cn
 
继续阅读 »

1. OpenSearch 没有故障,只是返回了空结果,何意味?(需要梯子)
https://medium.com/%40shiki655 ... fa91e

2. 从 ClickHouse + Elasticsearch 到 Apache Doris:快手如何统一万亿级广告分析(需要梯子)
https://medium.com/%40VeloDB_p ... 1513d

3. 案例详解生产级RAG的构建实录(需要梯子)
https://blog.devops.dev/buildi ... cc0d3

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
Detailed case explanation of the construction record of production-grade RAG (requires ladder) https://blog.devops.dev/buildi ... cc0d3 Editor: Steven More information: http://news.searchkit.cn
  收起阅读 »

【搜索客社区日报】第2207期 (2026-03-30)

1. Easysearch 文本分析:Analyzer 的工作原理解析
https://easysearch.cn/knowledg ... iple/
2. Easysearch 向量检索之从原理到实战
https://www.modb.pro/db/1924271434663211008
 
3. Elasticsearch查询性能深度优化指南:从原理到实战
https://www.cnblogs.com/ljbguanli/p/19728826
 
4. Elasticsearch 查询性能优化:从 3 秒到 300ms 的 6 个核心参数调优
https://developer.aliyun.com/article/1673848
 
5. 2026 年 RAG 技术最新进展与落地实践指南
https://segmentfault.com/a/1190000047621497
 
编辑:Muse
更多资讯:http://news.searchkit.cn
 
继续阅读 »
1. Easysearch 文本分析:Analyzer 的工作原理解析
https://easysearch.cn/knowledg ... iple/
2. Easysearch 向量检索之从原理到实战
https://www.modb.pro/db/1924271434663211008
 
3. Elasticsearch查询性能深度优化指南:从原理到实战
https://www.cnblogs.com/ljbguanli/p/19728826
 
4. Elasticsearch 查询性能优化:从 3 秒到 300ms 的 6 个核心参数调优
https://developer.aliyun.com/article/1673848
 
5. 2026 年 RAG 技术最新进展与落地实践指南
https://segmentfault.com/a/1190000047621497
 
编辑:Muse
更多资讯:http://news.searchkit.cn
  收起阅读 »

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

1、2026 年中国搜索型数据库市场观察与分析
https://mp.weixin.qq.com/s/ZaC2rLPSDIMYSaAehc1tTg

2、Easysearch 审计日志实战:谁访问了你的集群?
https://mp.weixin.qq.com/s/4cDAMvCeK-SILdZhy4i9oA

3、深入理解 Elasticsearch 写入与查询机制
https://mp.weixin.qq.com/s/YkjONLHe7BIXRPHLiUwTbg

4、一文带你搞懂 Prompt、Tools、Workflow、Skill、MCP 等 AI 概念之间的区别
https://blog.csdn.net/2301_798 ... 60468

5、Easysearch 文本分析:Analyzer 的工作原理解析
https://easysearch.cn/knowledg ... iple/

编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、2026 年中国搜索型数据库市场观察与分析
https://mp.weixin.qq.com/s/ZaC2rLPSDIMYSaAehc1tTg

2、Easysearch 审计日志实战:谁访问了你的集群?
https://mp.weixin.qq.com/s/4cDAMvCeK-SILdZhy4i9oA

3、深入理解 Elasticsearch 写入与查询机制
https://mp.weixin.qq.com/s/YkjONLHe7BIXRPHLiUwTbg

4、一文带你搞懂 Prompt、Tools、Workflow、Skill、MCP 等 AI 概念之间的区别
https://blog.csdn.net/2301_798 ... 60468

5、Easysearch 文本分析:Analyzer 的工作原理解析
https://easysearch.cn/knowledg ... iple/

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