Merged
Conversation
**tinysearch/base.py** - 新增 Retriever ABC,统一文本级检索接口 - 新增 FusionStrategy ABC,定义多路结果融合策略 - 新增 Reranker ABC,定义重排序接口 **新增文件 tinysearch/retrievers/__init__.py** **新增文件 tinysearch/retrievers/vector_retriever.py** - 新增 VectorRetriever,包装 Embedder + VectorIndexer 为 Retriever 接口 **新增文件 tinysearch/retrievers/bm25_retriever.py** - 新增 BM25Retriever,基于 bm25s 库实现关键词检索 - 支持 jieba 中文分词,可配置 tokenizer **新增文件 tinysearch/retrievers/substring_retriever.py** - 新增 SubstringRetriever,支持正则和纯文本子串匹配 **新增文件 tinysearch/fusion/__init__.py** **新增文件 tinysearch/fusion/rrf.py** - 新增 ReciprocalRankFusion,基于排名的融合策略 **新增文件 tinysearch/fusion/weighted.py** - 新增 WeightedFusion,min-max 归一化 + 加权求和融合 **新增文件 tinysearch/rerankers/__init__.py** **新增文件 tinysearch/rerankers/cross_encoder.py** - 新增 CrossEncoderReranker,基于 FlagEmbedding BGE 模型的交叉编码器重排序 **新增文件 tinysearch/query/hybrid.py** - 新增 HybridQueryEngine,多路召回 → 融合 → 可选重排序 pipeline **tinysearch/cli.py** - 新增 load_retriever / load_retrievers / load_fusion / load_reranker 工厂函数 - 扩展 load_query_engine 支持 method: "hybrid" **tinysearch/config.py** - 新增 retrievers / fusion / reranker 默认配置项 **tinysearch/flow/controller.py** - 新增多路检索器的 build / save / load 支持 **tinysearch/__init__.py** - 新增 retrievers / fusion / rerankers 模块导出 - 版本号升级 0.1.0 → 0.2.0 **setup.py** - 更新项目描述为混合检索系统 - 新增 hybrid / reranker 可选依赖组 **README.md** - 更新架构图,展示 Retriever → Fusion → Reranker 流程 - 新增 Hybrid Search 完整章节(配置、用法、结果格式) - 新增混合检索依赖安装说明 **影响说明** - 向后兼容:默认 method: "template" 行为不变,无需额外依赖 - 新增可选依赖:bm25s / jieba / FlagEmbedding 均为可选导入 + 优雅降级 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
新增功能: - Metadata Filtering:支持精确匹配、列表 OR、callable 谓词的后过滤 - 动态权重:retrieve() 支持 weights kwarg 透传到 FusionStrategy - Per-retriever min_score:各路召回后按阈值过滤低分结果 - retrieve_with_details():返回各阶段中间结果用于调试 Bug 修复: - (Critical) CLI/API 入口现在正确构建、保存、加载 BM25/Substring 索引 - (High) FlowController.query() 透传 **kwargs 到 query_engine.retrieve() - (High) 非向量 retriever 索引路径改为 FAISS 索引目录内,避免路径冲突 - (Medium) 融合去重键改为 text+source+chunk_index,防止不同 chunk 误合并 - (Medium) CLI 目录建索引时按文件逐个提取,确保 source 元数据精确到文件 - (Medium) HybridQueryEngine 召回异常改为 logger.warning,不再静默吞掉 - (Medium) QueryEngine ABC 签名统一添加 **kwargs - (Medium) API /query 端点透传 params 到检索引擎 测试:新增 tests/test_hybrid.py(31 个测试覆盖全部新功能和修复) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
**新增文件 tinysearch/utils/__init__.py** **新增文件 tinysearch/utils/file_discovery.py** - 新增 iter_input_files() 集中式目录扫描函数 - 支持 adapter_type 自动匹配默认扩展名、自定义扩展名覆盖、递归/非递归模式 **新增文件 tinysearch/indexers/metadata_index.py** - 新增 MetadataIndex 倒排索引,支持 O(1) 元数据预过滤 - 提供 build/lookup/classify_filters/save/load 全生命周期管理 **新增文件 tests/test_metadata_index.py** - 新增 MetadataIndex 单元测试 **tinysearch/adapters/text.py, csv.py, json_adapter.py, markdown.py, pdf.py** - 移除各 Adapter 内嵌的目录遍历逻辑 - 传入目录时抛出 ValueError,引导使用 iter_input_files() **tinysearch/query/hybrid.py** - 新增 metadata_index 和 filter_mode 参数("pre"/"post"/"auto") - 重构 retrieve() 流程:自动拆分 indexable/callable 过滤器 - 预过滤空结果时短路返回 **tinysearch/retrievers/bm25_retriever.py, substring_retriever.py, vector_retriever.py** - 统一新增 candidate_ids 参数支持预过滤 - 过召回再截断策略确保预过滤不影响 top_k 准确性 **tinysearch/indexers/faiss_indexer.py** - search() 新增 candidate_ids 参数 - 过召回 3x 再过滤策略 **tinysearch/cli.py** - 统一使用 iter_input_files() 替代手动 rglob 遍历 - build/save/load 流程集成 MetadataIndex **tinysearch/flow/controller.py** - process_directory() 统一使用 iter_input_files() - _build/_save/_load_retriever_indexes() 集成 MetadataIndex **tinysearch/indexers/__init__.py** - 导出 MetadataIndex **tests/test_hybrid.py** - 新增 iter_input_files、Adapter 目录拒绝、source 一致性、预过滤等测试 **README.md** - 新增 Directory Indexing 文档章节 - 更新 Custom Data Adapters 说明 **影响说明** - 质量提升:预过滤大幅减少无效检索计算量 - 架构改进:Adapter 职责单一化,文件发现逻辑集中管理 - 兼容性:向后兼容,metadata_index 默认 None、filter_mode 默认 "auto" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
**tinysearch/base.py** - 新增 RecordAdapter ABC,支持 Dict 数据源转 TextChunk **tinysearch/records.py** - 新增 build_chunks_from_records() 批量转换工具,保证 record_id 始终在 metadata 中 **tinysearch/indexers/hash_tracker.py** - 新增 ContentHashTracker 基于 MD5 的内容变更检测(new/modified/deleted/unchanged) - 新增 ChangeSet 数据结构,支持 save/load JSON 持久化 **tinysearch/indexers/metadata_index.py** - 新增 add_chunks() 增量追加倒排条目,无需全量重建 **tinysearch/query/hybrid.py** - 新增 soft_deleted_ids 参数,fusion 后自动过滤已删除记录 - 新增 add_soft_deletes()/clear_soft_deletes() 便捷方法 **tinysearch/flow/controller.py** - 新增 build_from_records() 从内存记录全量构建索引 - 新增 build_incremental() 增量更新管线(FAISS.add + MetadataIndex.add_chunks + BM25全量重建) - data_adapter 参数改为 Optional,支持纯 RecordAdapter 使用场景 - save/load 集成 soft_deletes.json 持久化 **tests/test_record_adapter.py** - 新增 RecordAdapter ABC + build_chunks_from_records 7 个测试 **tests/test_incremental.py** - 新增 ContentHashTracker、MetadataIndex.add_chunks、soft delete、build_incremental 21 个测试 **影响说明** - 功能:NeoSAGE 等 API 数据源项目可直接使用 TinySearch 标准管线 - 性能:增量更新仅对变更记录做 embedding,避免全量重算 - 兼容性:完全向后兼容,现有 DataAdapter 用法不受影响 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.