[NIDX-02B] 通过分段插件合约驱动本机编码器
父节点: #14007 受阻: #14073 (NIDX-02A)。一个打开的 Pull Request 不会解除阻塞; 02A 必须先合并。> **暂时形状。** 此叶子是 NIDX-02 级联链中对工作流程"无层形状票据"规则的最弱的部分:其消费者是索引库自己的生命周期而不是一个活动的属性调用者。它被单独提交,以便编码器(#14073)和生产切换(NIDX-02C)都可以进行审查,并且切换的依赖策略问题不会阻止编码器。**如果维护者判断它不是垂直的,则将其折叠到 NIDX-02C 中并关闭此节点作为已被取代** - 这是比一个过大的切换叶子更便宜的结果,而且该决定应在该节点成为最古老的未解除阻塞节点之前做出。## 界限 将 #14073 的编码器包装在 `SegmentPlugin` 合同中,以便现有的生命周期管理器可以驱动它: `New(results []segment.Document, normCalc func(string, int) float32) (segment.Segment, uint64, error)`, `Load(*segment.Data) (segment.Segment, error)`, 和 `Merge([]segment.Segment, []*roaring.Bitmap, int) segment.Merger`。返回的值必须满足完整的 `segment.Segment` (14 个方法) 和 `segment.Merger` (5 个方法) 合同,而不仅仅是序列化字节。每个类型都可以通过现有的中性 `segment` 别名访问。**未在本节点中注册。** 没有 `WithSegmentPlugin` 调用,没有对 `inverted.NewStore` 配置的更改,也没有生产行为的更改。插件是从测试中构建和驱动的。## 此叶子必须回答的委托问题,而不是假设 更便宜的实现将编码的字节包装在 `segment.NewDataBytes` 中,并将 `Load` 委托给固定的加载器,这将免费提供完整的接口。该委托到退役依赖的加载器,并且不能在跟踪源中写入新令牌。**不要承诺委托可用。** 在此叶子开始时,已经存在经过预先批准的中性桥接,或者适配器本地实现了合同。在第一次提交之前解决此问题,并在 PR 描述中记录答案。## 需要的行为- 生命周期管理器通过正常的 `Segment.WriteTo` 路径保存由 `New` 生成的分段,而 `Load` 重新打开已保存的字节。- `Merge` 生成一个分段,其可见文档是其输入的并集,减去提供的删除位图。- 输出仍然可以由 `nativeice.Open` 和固定的兼容读取器读取,完全符合 #14073。## RED / E2E / 套件 待在成为最古老的未解除阻塞节点时对 02A 的落地 API 进行锐化。RED 锚定在驱动插件的生命周期管理器上 - 在 `main` 中失败,因为不存在插件实现 - 而 e2e 锚定在一个持久化/重新打开/合并周期上,其输出仍然被合并的读取器接受。## 词法门槛 无新的大小写敏感的退役依赖令牌或匹配的跟踪路径。 `segment` 别名是中性的,对于合同来说是足够的; 别名的索引包不是
内容来源: apache/skywalking