Lucene(搜索引擎)招募

发布人:仓颉技术交流平台官方
分类:算法与数据结构 / 数学与科学计算

现招募开发者,利用仓颉语言​的特性,开发一个高性能、轻量级的全文搜索引擎核心库。该项目灵感源于Apache Lucene的设计哲学,但将完全基于仓颉语言进行原生重构与创新,旨在为仓颉语言生态贡献一个企业级的基础设施组件。

等待接取
2025-11-20
5

悬赏内容

招募内容

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. 静态分析:必须通过 Cangjie Linter及自定义静态检查规则,关键模块零警告。
2. 代码审查:任何代码合并请求(Pull Request)必须经过至少两名核心贡献者的评审。

测试覆盖率

1. 单元测试:针对所有公共API和非平凡私有方法,单元测试覆盖率不低于90%
2. 集成测试:需包含完整的端到端(End-to-End)测试,模拟从建库、索引到搜索的全流程。
3. 性能回归测试:建立性能基准线,任何新提交不得导致性能回归超过5%(除非有合理解释)。

文档完备性

1. 架构设计文档:包含详细的系统架构图、数据流图和核心算法说明。
2. API文档:基于代码注释生成,必须包含所有公共类、方法、参数和返回值的详细说明。
3. 开发者指南:提供清晰的《贡献者指南》,包括环境搭建、代码风格、测试和提交规范。

性能基准

项目需提供与Lucene Core(Java)在相同数据集(如维基百科部分数据dump)下的基准测试对比报告,关键指标包括:
- 索引速度​ (docs/sec)
- 查询延迟​ (P99 latency)
- 索引文件大小​ (compression ratio)

相关附件

暂无附件

质量认证要求

交付件

NO

交付件描述

备注

1

三方库源代码

源代码

2

三方库测试方案和用例

测试用例和文档

3

用户手册,API文档,设计文档,license文档

 资料和文档

验收标准

1.功能

  1. 三方库必须有明确的功能;

  2. 如果参考对标库移值开发,功能与参考三方库保持一致。

2.资料

  1. Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;

  2. Changelog,三方库版本需包含基本的修改说明。

3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例

  1. appquth:支持对OAuth 的PKCE扩展;

  2. icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。

4.性能目标

  1. 性能敏感三方库接口运行性能持平对标三方库

5.开源协议遵从,必须包含License文件

  1. 放置合适的开源License协议,建议Apache License Version 2.0;

  2. 引用或参考开源三方库,需遵从开源协议。

6.网络安全要求

  1. 满足基础的网络安全红线及隐私要求,符合安全编码规范。

过程质量要求

指标分类

指标名称

指标要求

度量工具

牵引 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