← 返回文档中心

匹配管理

匹配管理

优先级: P0(核心基础模块)
开发周期: 2 周

目标

解决多供应商的酒店/房型数据与平台标准数据之间的映射问题。这是 B2B2B 平台最核心的难点之一——不同供应商对同一酒店有不同编码、不同名称、不同房型描述。

核心功能

功能 描述
自动匹配 基于多维度特征(名称相似度、坐标距离、地址、电话、星级)自动匹配
人工审核 低置信度匹配进入人工审核队列
批量匹配 支持新供应商接入时批量匹配历史数据
匹配置信度 输出 0-100 的匹配置信度分数,自动通过阈值可配置
反向映射 支持从平台酒店反查各供应商对应编码
匹配日志 记录匹配过程和变更历史,便于问题排查
房型匹配 酒店匹配后,自动/半自动匹配房型(床型、面积、人数等)

匹配算法设计

综合匹配置信度 = W1 × 名称相似度 + W2 × 坐标距离分 + W3 × 地址相似度 + W4 × 星级匹配 + W5 × 链品牌匹配

名称相似度: Levenshtein Distance + Jaro-Winkler
坐标距离分: Haversine 公式,< 500m 得满分,> 5km 得 0 分
地址相似度: 去除标点空格后的编辑距离
星级匹配: 精确匹配 100%,差 1 级 50%,差 2 级 0%

默认权重: W1=0.35, W2=0.30, W3=0.15, W4=0.10, W5=0.10
通过阈值: >= 85 分自动匹配,60-85 人工审核,< 60 标记为不匹配

数据模型

-- 匹配规则表
CREATE TABLE match_rules (
    id              SERIAL PRIMARY KEY,
    supplier_code   VARCHAR(32) NOT NULL,
    rule_type       VARCHAR(32) NOT NULL,     -- hotel/room_type
    field_name      VARCHAR(64) NOT NULL,     -- name/lat_lng/address/star
    algorithm       VARCHAR(64) NOT NULL,     -- levenshtein/haversine/exact/regex
    weight          DECIMAL(3, 2) NOT NULL,   -- 权重 0.00-1.00
    threshold       DECIMAL(5, 2),            -- 单字段阈值
    params          JSONB,                    -- 算法参数
    priority        SMALLINT DEFAULT 0,
    enabled         BOOLEAN DEFAULT true,
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

-- 匹配任务表
CREATE TABLE match_tasks (
    id              BIGSERIAL PRIMARY KEY,
    task_type       VARCHAR(32) NOT NULL,     -- hotel/room_type
    supplier_code   VARCHAR(32) NOT NULL,
    total_count     INT DEFAULT 0,
    matched_count   INT DEFAULT 0,
    pending_count   INT DEFAULT 0,
    failed_count    INT DEFAULT 0,
    status          VARCHAR(20) DEFAULT 'pending',  -- pending/running/completed/failed
    started_at      TIMESTAMPTZ,
    completed_at    TIMESTAMPTZ,
    created_by      VARCHAR(64),
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

-- 匹配历史表(审计)
CREATE TABLE match_history (
    id              BIGSERIAL PRIMARY KEY,
    task_id         BIGINT REFERENCES match_tasks(id),
    supplier_code   VARCHAR(32),
    match_type      VARCHAR(32),             -- hotel/room_type
    supplier_id     VARCHAR(64) NOT NULL,
    platform_id     BIGINT,                  -- 匹配到的平台ID
    confidence      DECIMAL(5, 2),
    match_method    VARCHAR(32),             -- auto/manual/unmatched
    old_platform_id BIGINT,                  -- 变更前的映射(如重新匹配)
    details         JSONB,                   -- 各维度得分明细
    operator        VARCHAR(64),             -- 操作人(auto/manual)
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_match_history_task ON match_history (task_id);
CREATE INDEX idx_match_history_supplier ON match_history (supplier_code);

接口设计

# 匹配操作 API
POST   /api/v1/match/hotels                    # 触发酒店匹配任务
POST   /api/v1/match/room-types                # 触发房型匹配任务
GET    /api/v1/match/tasks                     # 匹配任务列表
GET    /api/v1/match/tasks/:id                 # 匹配任务详情+进度
GET    /api/v1/match/pending                   # 待人工审核的匹配列表
POST   /api/v1/match/pending/:id/confirm       # 确认匹配
POST   /api/v1/match/pending/:id/reject        # 拒绝匹配

# 映射查询 API
GET    /api/v1/mappings/hotel?supplier=XXX&supplier_hotel_id=YYY
GET    /api/v1/mappings/hotel/:platform_hotel_id/suppliers  # 反向查映射
GET    /api/v1/mappings/room-type?supplier=XXX&supplier_room_code=YYY

与其他模块的关系

关联模块 关系
酒店基库 读写标准酒店/房型数据
查价引擎 提供供应商编码 → 平台编码的映射
管理后台 人工审核界面
库存管理 通过映射关系同步各供应商库存

技术选型建议