企业级知识库项目:全文检索管道
文档发布后,会给 RabbitMQ 发消息
然后有三条消费者管道:
RAG:分块 → 向量化 → ES kh_chunk(语义检索) Search:文档快照 → ES kh_document(关键词检索) KG:分块 → 抽实体关系 → Neo4j(图谱关联查询)

文档快照就是通过消息传递的文档关键字段
上节实现了向量化那条管道
这节来实现下全文检索管道
首先,我们要加一个 search 的消息队列和交换机:

topic 类型的交换机就是这种:

然后加一下往这个队列发消息的逻辑:

文档发布成功后,并行往着两个队列发消息:

然后消费者那边也加一个:

具体的消费者逻辑在 pipeline 模块:


就是基于这个文档快照,创建索引。
整体流程还是很清晰的。

具体涉及到这些代码的改动:

document 模块要加一下正文的消息传递,之前只传了 doc_id
mq 模块加了 search 的交换机和队列,以及消费者
pipeline 模块加了新的流水线,处理收到消息后的存储、删除逻辑。
我们来具体看一下代码:
Video: wxv_4639183098214350848
就是多了一个队列、一个消费者、一条管道来处理新的消息。
然后额外处理了下删除文档时的逻辑。
然后我们测一下:
---
GET /_cat/indices?
GET /kh_document/_search
{
"size": 100,
"query": {
"match_all": {}
}
}
GET /kh_chunk/_search
{
"size": 100,
"query": {
"match_all": {}
}
}
POST /kh_document/_delete_by_query
{
"query": {
"match_all": {}
}
}
POST /kh_chunk/_delete_by_query
{
"query": {
"match_all": {}
}
}
Video: wxv_4639184351337922564
一条管道通往 kh_chunk 索引表,用来语义检索。
一条管道通往 kh_document 索引表,用于全文检索。
我们清空数据,然后重新跑了下 publish
可以看到这俩表都有数据了,证明两条管道都没问题了。
最后说一下仓库的问题
仓库在 https://gitcode.com/guang-agent/knowledge-hub-backend
(可以加我微信 guangguangsunlight 开权限)
按照 v1、v2、v3、v4 的分支来放每节代码:

你可以切换到对应的分支来看代码,比如这节代码在 v4 分支
总结
这节我们跑通了发布后的另一条管道:全文检索表的存储
现在 publish 之后,会走两条管道:
分块 → 向量化 → ES kh_chunk 文档快照 → ES kh_document
并且也做了文档删除时的同步处理。
还剩最后一条抽取实体、关系,存到图数据库的管道,下节继续实现。