Elastic search浅析
Elastic search浅析
背景
在软件开发过程中,数据库通常承担数据持久化与结构化查询的任务。关系型数据库可以通过主键、外键、索引和 SQL 条件查询来完成数据检索。然而,假如我想在数据库中搜索某段文字如“如何优化大模型知识库召回效果”,效果往往较差。因为这类问题并不只是简单的
WHERE title = ...或LIKE '%keyword%',而是涉及全文检索
Elasticsearch 正是为了解决这类问题而广泛使用的搜索与分析引擎。它基于 Apache Lucene 构建,提供了分布式、近实时、高性能的全文检索能力。
在关系型数据库中,如果希望检索包含某个关键词的文章,可能会使用:
SELECT * FROM articles WHERE content LIKE '%Elasticsearch%';
这种方式在数据量较小时可以接受,但当文档数量达到百万级、千万级甚至更大时,性能和搜索质量都会遇到明显瓶颈。
而 Elasticsearch 会通过倒排索引快速定位包含目标词项的文档,并根据 BM25 等相关性算法为结果排序。这使它更适合构建站内搜索、日志检索、文档问答和知识库检索系统
基本思想
当一篇文档被写入 Elasticsearch 时,它并不是简单地以原文形式存储起来。Elasticsearch 会根据字段类型和分析器配置,对文本进行分词、标准化、建立倒排索引等处理。倒排索引可以理解为:从词到文档的映射。
例如,有三篇文档:
文档1:Elasticsearch 是一个搜索引擎
文档2:搜索引擎使用倒排索引
文档3:RAG 系统需要检索文档
建立倒排索引后,系统可以知道:
搜索引擎 -> 文档1,文档2
倒排索引 -> 文档2
检索 -> 文档3
这样,当用户搜索“搜索引擎”时,Elasticsearch 就可以快速定位相关文档,而不需要逐篇扫描全部内容。
分词
英文文本通常可以根据空格和标点进行切分,而中文文本没有天然空格,因此需要专门的中文分词器。
我正在学习 Elasticsearch 搜索引擎
可能被切分为:
我 / 正在 / 学习 / Elasticsearch / 搜索引擎
分词质量会直接影响搜索效果。如果分词不合理,用户即使输入了正确的关键词,也可能无法召回理想文档。

Mapping
Mapping 用于定义字段类型。例如:
{
"title": {
"type": "text"
},
"created_at": {
"type": "date"
},
"author_id": {
"type": "keyword"
}
}
其中:
text类型适合全文检索,会进行分词;keyword类型适合精确匹配,不进行分词;date适合时间范围查询;integer、float等适合数值查询;dense_vector可用于向量检索。
Mapping 的设计会直接影响搜索能力和性能。如果将需要全文检索的字段错误地设置为keyword,则搜索效果会受到限制;如果将只需要精确匹配的字段设置为text,则可能带来不必要的分词和索引开销。

RAGFlow中ES的设计
在RagFlow中,默认配置的文档引擎是elasticsearch。
主要包含
一条 chunk 文档同时承载多种信息:
原文:content_with_weight
分词字段:content_ltks、content_sm_ltks、title_tks
关键词/假问句:important_kwd、question_kwd、question_tks
向量:q_{dim}_vec,支持不同 embedding 维度共存
元数据与定位:kb_id、doc_id、page_num_int、position_int、bbox
检索流程:BM25 全文召回 + KNN 向量召回并行,应用层做分数归一化后加权融合,默认 tkweight=0.3、vtweight=0.7。
多粒度权重:正文 1×、标题 2×、important_kwd 5×、question_tks 6×。
重排:token 相似度 + 向量相似度 + rank_feature,并配合两段式查询策略。
RAGFlow+ES 和 父子切分端侧RAG 对比
RAGFlow优势
- 假问句生成:RAGFlow 调 LLM 生成
统的RAG是直接用用户简短、口语化的提问去匹配文档中完整、详尽的答案,这种“问题”与“答案”之间的语义维度往往不匹配。假设问题索引则提前为每个知识段落构思出它可能回答的“假设性问题”,并为这些问题建立专门的向量索引。利用大语言模型分析每个文档分块,生成3到5个与之相关的假设性问题。例如,对于“本公司差旅补助标准为每天200元”这段文本,可能会生成“出差补贴是多少?”、“每日补助标准是多少?”等问题。当用户提出真实问题时,系统将其向量化,并与“假设问题库”进行相似度比对。匹配到最相似的假设问题后,系统会回溯到它所指向的原始文本片段,并基于此生成最终回答。
- 多粒度权重 1/2/5/6:RAGFlow 应用层决定
- 分数归一化融合:RAGFlow 自定义
ES优势
- dense_vector + kNN
- 分布式、副本、快照、安全、可观测性。
- 统一检索底座
端侧局限
ES自身稳态占用就达到5-6GB,加上数据远远不可用
RAGflow最低要求16G内存,推荐是32G,端侧设备不可用
MinerU+父子切分(章节分块):缩小甚至追平解析和分块差距
浙公网安备 33010602011771号