Lucene(搜索引擎)招募
现招募开发者,利用仓颉语言的特性,开发一个高性能、轻量级的全文搜索引擎核心库。该项目灵感源于Apache Lucene的设计哲学,但将完全基于仓颉语言进行原生重构与创新,旨在为仓颉语言生态贡献一个企业级的基础设施组件。
悬赏内容
招募内容
1. 项目概述
本项目旨在解决仓颉语言在信息检索领域基础设施的空白。通过原生实现倒排索引、文本分析、相关性评分等核心算法,本项目将致力于成为未来基于仓颉语言构建的搜索应用、数据库系统的基石。我们寻求的不仅是功能的实现,更是对代码质量、架构设计和性能卓越的极致追求。
项目属性 | 详细说明 |
|---|---|
项目名称 | JiLib - 仓颉语言全文搜索引擎库 (暂定名) |
项目性质 | 公益性、开源、非营利 |
技术栈 | 仓颉语言 为主要开发语言 |
项目灵感 | Apache Lucene 的架构思想与设计哲学 |
核心目标 | 为仓颉语言生态打造一个具备生产级性能、可扩展性强、文档完备的全文搜索引擎基础库。 |
2. 招募具体内容与技术规格
2.1 核心模块设计与实现要求
模块一:核心索引引擎 (Indexing Core)
设计目标:实现一个基于日志结构合并树(LSM-Tree)思想的、支持实时与批量索引的引擎。
详细要求:
索引结构:需明确定义倒排索引(Postings List)、正排索引(Stored Fields)和词项字典(Term Dictionary)在磁盘上的文件格式(如
.cif用于存储索引文件)。并发控制:必须实现读写锁机制,支持多线程并发读,保证数据一致性。
段合并策略:实现可配置的段合并策略(如Tiered、Leveled),以平衡读写放大效应。
代码示例(预期中的核心接口设计):
// 预期中的索引写入器接口示例
接口 索引写入器 {
// 添加文档到索引
功 添加文档(文档 文档实例) 抛 异常 【索引写入异常】
// 执行提交,使更改对搜索可见
功 提交() 抛 异常 【索引提交异常】
// 可选:执行段合并优化
功 强制合并(整型 最大段数) 抛 异常 【合并异常】
// 资源清理
功 关闭() 抛 异常 【索引关闭异常】
}
// 文档对象应包含可索引、可存储的字段
类 文档 {
私有 字段映射: 映射<文本, 字段>
功 添加字段(字段 字段实例) {
// 实现细节...
}
}模块二:文本分析链 (Analysis Chain)
设计目标:构建一个高度模块化、可插拔的文本分析管道(Pipeline)。
详细要求:
管道模型:采用责任链模式,依次经过:字符过滤器(Character Filter)-> 分词器(Tokenizer)-> 词元过滤器(Token Filter)。
中文分词:需至少实现一种高质量的中文分词算法(如基于词典的最大正向匹配),并保证其性能与准确性。
可扩展性:开发者应能通过实现标准接口,轻松自定义任何环节的组件。
模块三:查询与评分模块 (Search & Ranking)
设计目标:实现布尔查询解析、向量空间模型(或BM25算法)及自定义评分功能。
详细要求:
查询解析:支持如
标题:搜索 AND 内容:引擎 OR 作者:张三这样的查询语法。评分算法:优先实现当前行业标准的 BM25 相关性评分算法。
结果聚合:需支持对搜索结果进行分页、高亮、排序等常见操作。
代码示例(预期中的搜索接口设计):
// 预期中的搜索入口接口
类 索引搜索器 {
此(文本 索引路径) {
// 初始化搜索器,打开索引
}
// 核心搜索方法
功 搜索(查询 查询条件, 整型 最大返回结果数) -> 列表<搜索结果> {
// 1. 解析查询
// 2. 从索引中获取匹配文档
// 3. 计算相关性得分并排序
// 4. 封装并返回结果列表
}
功 关闭() {
// 释放资源
}
}
// 查询条件的基础抽象
抽象 类 查询 {
抽象 权重 重写(索引读取器 读取器) 抛 异常 【查询异常】
}3. 项目质量认证与交付标准
为确保项目成果的工业级质量,所有贡献代码必须满足以下量化标准:
质量维度 | 具体指标与验收标准 |
|---|---|
代码质量 | 1. 静态分析:必须通过 |
测试覆盖率 | 1. 单元测试:针对所有公共API和非平凡私有方法,单元测试覆盖率不低于90%。 |
文档完备性 | 1. 架构设计文档:包含详细的系统架构图、数据流图和核心算法说明。 |
性能基准 | 项目需提供与Lucene Core(Java)在相同数据集(如维基百科部分数据dump)下的基准测试对比报告,关键指标包括: |
相关附件
质量认证要求
交付件
NO | 交付件描述 | 备注 |
1 | 三方库源代码 | 源代码 |
2 | 三方库测试方案和用例 | 测试用例和文档 |
3 | 用户手册,API文档,设计文档,license文档 | 资料和文档 |
验收标准
1.功能
三方库必须有明确的功能;
如果参考对标库移值开发,功能与参考三方库保持一致。
2.资料
Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;
Changelog,三方库版本需包含基本的修改说明。
3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例
appquth:支持对OAuth 的PKCE扩展;
icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。
4.性能目标
性能敏感三方库接口运行性能持平对标三方库
5.开源协议遵从,必须包含License文件
放置合适的开源License协议,建议Apache License Version 2.0;
引用或参考开源三方库,需遵从开源协议。
6.网络安全要求
满足基础的网络安全红线及隐私要求,符合安全编码规范。
过程质量要求
指标分类 | 指标名称 | 指标要求 | 度量工具 | 牵引 OR Must |
代码度量 | 平均文件代码行 | ≤300 LOC | CMetricsPlus,CJMetric | Must |
总文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均函数或方法代码行* | ≤30 LOC | CMetricsPlus,CJMetric | Must | |
总代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均圈复杂度 | ≤5;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
冗余代码 | “0” 【2】; | CMetricsPlus,CJMetric | Must | |
不安全函数 | NA | CMetricsPlus,CJMetric | Must | |
静态检查 | 编译告警 | “0” 【2】 | Compile工具 | 牵引 |
通用静态告警 | “0” 【2】 | Pclint plus,CJLINT | Must | |
开发者测试 | DT用例密度(个/KLOC) | > 40 | 手工 | 牵引 |
DT代码语句覆盖率 | >=85% | Gcov,cjcov | 牵引 | |
DT代码分支覆盖率 | >=50% | Gcov,cjcov | 牵引 | |
未做DT文件数 | 0 | 手工 | 牵引 | |
问题解决率 | 遗留问题DI | 整体<10 | Issue | 牵引 |
遗留致命缺陷数(0) | 0 | Issue | Must | |
累计缺陷解决率 | 85% | Issue | 牵引 | |
软件开发 | 每日构建成功率 | 100% | CI | 牵引 |
测试评估 | 测试缺陷密度(/KLOC) | 5-9 | 人工 | 牵引 |
测试用例密度(个/KLOC) | 20-40 | 人工 | 牵引 | |
初验用例自动化率 | 100% | CIDA | 牵引 | |
HLT自动化用例比率 | 【85%,95%】 | CIDA | 牵引 | |
开源第三方(含构建工具) | 开源片段引用 | 0(除例外备案类) | FOSSBOT+人工 | Must |
可信构建 | 二进制一致性 | 0(含可澄清) | 人工 | Mus |

