SuperAPI AI 工具集

nestjs-search

编程与开发

查看项目

更新于 10-15 22:13

技能介绍

用途:在 NestJS 项目中集成 Elasticsearch 等搜索引擎,并实现搜索索引的同步模式。采用 CQRS(命令查询职责分离)思路:写操作指向主数据库(Postgres/MySQL)作为唯一事实来源,复杂读取交由搜索引擎(Elasticsearch、OpenSearch、MeiliSearch),以优化过滤、模糊搜索与聚合。

主要能力与同步方案:

  1. 双写(反模式):先 db.save() 再 es.index(),部分失败会导致数据不一致并拖慢 HTTP 响应,不推荐。
  2. 事件驱动(推荐):服务写库后发出 EntityUpdated 事件,异步事件处理器推送到队列(BullMQ),Worker 带重试地把文档索引到搜索引擎。
  3. CDC(金标准):变更数据捕获(Debezium),直连数据库事务日志,应用层无概念负担,但运维复杂度更高。

组织方式:将客户端封装在 SearchModule 中;创建通用 SearchService<T> 辅助方法,例如 indexDocument(id, body)、search(query, filters);使用 class-transformer 把实体映射为“搜索文档”,文档结构应比关系型实体更扁平。

测试:关键 E2E 流程中不要 mock 搜索引擎;在测试环境用 Docker 启动 elasticsearch:8 容器验证索引行为。

反模式:不要对 DB 与 ES 做双写,应改用事件驱动或 CDC;不要用 Elasticsearch 处理结构化查询,过滤应使用数据库索引,ES 用于全文与复杂搜索;E2E 搜索测试中不要 mock ES。

限制:资料未提供具体版本要求、依赖安装命令、代码示例细节及性能数据,暂未提供。