You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置同Docker容器内的Typesense使用内置MongoDB的数据

问题根因

Typesense本身是独立的搜索引擎服务,不会自动读取同网络内部署的MongoDB数据。你当前的配置只启动了三个独立服务,没有搭建MongoDB到Typesense的数据同步链路,Typesense内没有写入任何业务数据,调用接口返回num_documents: 0是正常现象。
你已经完成了MongoDB副本集配置,满足同步的前置要求,按以下步骤配置即可实现数据自动同步:

配置步骤
  • 第一步:更新docker-compose配置
    你当前使用的Typesense 0.21.0版本过旧,存在较多同步相关的已知bug,先升级到稳定版,同时新增官方MongoDB同步连接器服务,负责全量拉取存量数据、监听增量变更同步到Typesense。完整配置参考如下:
version: "3.9"
services:
  database:
    image : 'mongo'
    container_name: 'container-name'
    environment:
      -  PUID=1000
      -  PGID=1000
    volumes:
      -  ./database:/data/db
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
    ports:
      -  27017:27017
    restart: unless-stopped
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
      interval: 10s
      timeout: 5s
      retries: 5
    
  mongo-express:
    image: mongo-express:1.0.2
    ports:
      - "8081:8081"
    environment:
      ME_CONFIG_MONGODB_SERVER: database
    depends_on:
      database:
        condition: service_healthy
    restart: unless-stopped

  typesense:
    image: typesense/typesense:26.0
    ports:
      - "8108:8108"
    environment:
      TYPESENSE_API_KEY: xyz
      TYPESENSE_DATA_DIR: /data/typesense
      TYPESENSE_ENABLE_CORS: "true"
    volumes:
      - ./typesense:/data/typesense
    restart: unless-stopped
    healthcheck:
      test: curl -f http://localhost:8108/health
      interval: 10s
      timeout: 5s
      retries: 5

  typesense-mongodb-connector:
    image: typesense/typesense-mongodb-connector:latest
    depends_on:
      database:
        condition: service_healthy
      typesense:
        condition: service_healthy
    environment:
      MONGODB_URI: "mongodb://database:27017/?replicaSet=rs0"
      TYPESENSE_API_KEY: "xyz"
      TYPESENSE_HOST: "typesense:8108"
      TYPESENSE_PROTOCOL: "http"
      # 同步规则配置,替换为自己的实际库表信息
      SYNC_CONFIG: |
        {
          "替换为你的MongoDB库名": {
            "替换为你要同步的MongoDB集合名": {
              "typesense_collection_name": "替换为对应Typesense集合名",
              "fields": [
                {"name": ".*", "type": "auto"}
              ]
            }
          }
        }
    restart: unless-stopped

上述配置中新增的健康检查是为了保证MongoDB、Typesense完全启动后再启动同步连接器,避免启动时连接报错。fields配置中{"name": ".*", "type": "auto"}表示自动同步集合下所有字段、自动识别字段类型,也可以根据业务需要手动指定字段映射规则。如果不需要同步历史存量数据,只同步启动后的增量变更,可以给连接器新增环境变量FULL_SYNC: "false"。

  • 第二步:初始化MongoDB副本集
    首次启动MongoDB容器后,需要手动进入容器完成副本集初始化,否则MongoDB变更流无法正常工作:

    1. 进入MongoDB shell:docker exec -it container-name mongosh
    2. 执行副本集初始化命令:
    rs.initiate({
      _id: "rs0",
      members: [{ _id: 0, host: "database:27017" }]
    })
    
    1. 等待10秒左右,执行rs.status(),返回结果中成员状态显示为PRIMARY即代表初始化完成,退出shell即可。
  • 第三步:启动服务验证同步
    执行docker compose up -d重启所有服务,等待1-2分钟让全量同步完成后,再调用Typesense的集合文档查询接口,就能看到num_documents数值和MongoDB中对应集合的文档数量一致。后续MongoDB中的数据增删改操作都会自动实时同步到Typesense。

注意:如果同步后文档数量为0,先检查同步规则里的库名、集合名是否填写正确,再查看连接器日志确认是否有连接报错、权限报错。

内容的提问来源于stack exchange,提问作者Anderson Mendes de Almeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:57:12