索引字段说明.md 11.3 KB

索引字段说明文档

本文档详细说明了 Elasticsearch 索引中所有字段的类型、索引方式、数据来源等信息。

索引基本信息

  • 索引名称: search_products
  • 索引级别: SPU级别(商品级别)
  • 数据结构: SPU文档包含嵌套的variants(SKU)数组

字段说明表

基础字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 说明
tenant_id KEYWORD 精确匹配 SPU表 tenant_id BIGINT 租户ID,用于多租户隔离
product_id KEYWORD 精确匹配 SPU表 id BIGINT 商品ID(SPU ID)
handle KEYWORD 精确匹配 SPU表 handle VARCHAR(255) 商品URL handle

文本搜索字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 Boost权重 说明
title TEXT chinese_ecommerce分析器 SPU表 title VARCHAR(512) 3.0 商品标题,权重最高
brief TEXT chinese_ecommerce分析器 SPU表 brief VARCHAR(512) 1.5 商品简介
description TEXT chinese_ecommerce分析器 SPU表 description TEXT 1.0 商品详细描述

SEO字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 Boost权重 是否返回 说明
seo_title TEXT chinese_ecommerce分析器 SPU表 seo_title VARCHAR(512) 2.0 SEO标题,用于提升相关性
seo_description TEXT chinese_ecommerce分析器 SPU表 seo_description TEXT 1.5 SEO描述
seo_keywords TEXT chinese_ecommerce分析器 SPU表 seo_keywords VARCHAR(1024) 2.0 SEO关键词

分类和标签字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 Boost权重 是否返回 说明
vendor TEXT chinese_ecommerce分析器 SPU表 vendor VARCHAR(255) 1.5 供应商/品牌(文本搜索)
vendor_keyword KEYWORD 精确匹配 SPU表 vendor VARCHAR(255) - 供应商/品牌(精确匹配,用于过滤)
product_type TEXT chinese_ecommerce分析器 SPU表 category VARCHAR(255) 1.5 商品类型(文本搜索)
product_type_keyword KEYWORD 精确匹配 SPU表 category VARCHAR(255) - 商品类型(精确匹配,用于过滤)
tags TEXT chinese_ecommerce分析器 SPU表 tags VARCHAR(1024) 1.0 标签(文本搜索)
tags_keyword KEYWORD 精确匹配 SPU表 tags VARCHAR(1024) - 标签(精确匹配,用于过滤)
category TEXT chinese_ecommerce分析器 SPU表 category VARCHAR(255) 1.5 类目(文本搜索)
category_keyword KEYWORD 精确匹配 SPU表 category VARCHAR(255) - 类目(精确匹配,用于过滤)

价格字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 说明
min_price FLOAT 数值范围 SKU表(聚合计算) price DECIMAL(10,2) 最低价格(从所有SKU中取最小值)
max_price FLOAT 数值范围 SKU表(聚合计算) price DECIMAL(10,2) 最高价格(从所有SKU中取最大值)
compare_at_price FLOAT 数值范围 SKU表(聚合计算) compare_at_price DECIMAL(10,2) 原价(从所有SKU中取最大值)

价格计算逻辑

  • min_price: 取该SPU下所有SKU的price字段的最小值
  • max_price: 取该SPU下所有SKU的price字段的最大值
  • compare_at_price: 取该SPU下所有SKU的compare_at_price字段的最大值(如果存在)

图片字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 说明
image_url KEYWORD 不索引 SPU表 image_src VARCHAR(500) 商品主图URL,仅用于展示

文本嵌入字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 说明
title_embedding TEXT_EMBEDDING 向量相似度(dot_product) 计算生成 title VARCHAR(512) 标题的文本向量(1024维),用于语义搜索

说明

  • 向量维度:1024
  • 相似度算法:dot_product(点积)
  • 数据来源:基于title字段通过BGE-M3模型生成

时间字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 是否返回 说明
create_time DATE 日期范围 SPU表 create_time DATETIME 创建时间
update_time DATE 日期范围 SPU表 update_time DATETIME 更新时间
shoplazza_created_at DATE 日期范围 SPU表 shoplazza_created_at DATETIME 店匠系统创建时间
shoplazza_updated_at DATE 日期范围 SPU表 shoplazza_updated_at DATETIME 店匠系统更新时间

嵌套Variants字段(SKU级别)

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 说明
variants JSON (nested) 嵌套对象 SKU表 - - 商品变体数组(嵌套结构)

Variants子字段

索引字段名 ES字段类型 是否索引 索引方式 数据来源表 表中字段名 表中字段类型 说明
variants.variant_id keyword 精确匹配 SKU表 id BIGINT 变体ID(SKU ID)
variants.title text chinese_ecommerce分析器 SKU表 title VARCHAR(500) 变体标题
variants.price float 数值范围 SKU表 price DECIMAL(10,2) 变体价格
variants.compare_at_price float 数值范围 SKU表 compare_at_price DECIMAL(10,2) 变体原价
variants.sku keyword 精确匹配 SKU表 sku VARCHAR(100) SKU编码
variants.stock long 数值范围 SKU表 inventory_quantity INT(11) 库存数量
variants.options object 对象 SKU表 option1/option2/option3 VARCHAR(255) 选项(颜色、尺寸等)

Variants结构说明

  • variants 是一个嵌套对象数组,每个元素代表一个SKU
  • 使用ES的nested类型,支持对嵌套字段进行独立查询和过滤
  • options 对象包含 option1option2option3 三个字段,分别对应SKU表中的选项值

字段类型说明

ES字段类型映射

ES字段类型 Elasticsearch映射 用途
KEYWORD keyword 精确匹配、过滤、聚合、排序
TEXT text 全文检索(支持分词)
FLOAT float 浮点数(价格、权重等)
LONG long 整数(库存、计数等)
DATE date 日期时间
TEXT_EMBEDDING dense_vector 文本向量(1024维)
JSON object/nested 嵌套对象

分析器说明

分析器名称 语言 说明
chinese_ecommerce 中文 Ansj中文分词器(电商优化),用于中文文本的分词和搜索

索引配置

索引设置

  • 分片数: 1
  • 副本数: 0
  • 刷新间隔: 30秒

查询域(Query Domains)

系统定义了多个查询域,用于在不同场景下搜索不同的字段组合:

  1. default(默认索引): 搜索所有文本字段

    • 包含字段:title, brief, description, seo_title, seo_description, seo_keywords, vendor, product_type, tags, category
    • Boost: 1.0
  2. title(标题索引): 仅搜索标题相关字段

    • 包含字段:title, seo_title
    • Boost: 2.0
  3. vendor(品牌索引): 仅搜索品牌字段

    • 包含字段:vendor
    • Boost: 1.5
  4. category(类目索引): 仅搜索类目字段

    • 包含字段:category
    • Boost: 1.5
  5. tags(标签索引): 搜索标签和SEO关键词

    • 包含字段:tags, seo_keywords
    • Boost: 1.0

数据转换规则

数据类型转换

  1. BIGINT → KEYWORD: 数字ID转换为字符串(如 product_id, variant_id
  2. DECIMAL → FLOAT: 价格字段从DECIMAL转换为FLOAT
  3. INT → LONG: 库存数量从INT转换为LONG
  4. DATETIME → DATE: 时间字段转换为ISO格式字符串

特殊处理

  1. 价格聚合: 从多个SKU的价格中计算min_price、max_price、compare_at_price
  2. 图片URL处理: 如果image_src不是完整URL,会自动添加协议前缀
  3. 选项合并: 将SKU表的option1、option2、option3合并为options对象

注意事项

  1. 多租户隔离: 所有查询必须包含 tenant_id 过滤条件
  2. 嵌套查询: 查询variants字段时需要使用nested查询语法
  3. 字段命名: 用于过滤的字段应使用 *_keyword 后缀的字段
  4. 向量搜索: title_embedding字段用于语义搜索,需要配合文本查询使用
  5. Boost权重: 不同字段的boost权重影响搜索结果的相关性排序

数据来源表结构

SPU表(shoplazza_product_spu)

主要字段:

  • id: BIGINT - 主键ID
  • tenant_id: BIGINT - 租户ID
  • handle: VARCHAR(255) - URL handle
  • title: VARCHAR(512) - 商品标题
  • brief: VARCHAR(512) - 商品简介
  • description: TEXT - 商品描述
  • vendor: VARCHAR(255) - 供应商/品牌
  • category: VARCHAR(255) - 类目
  • tags: VARCHAR(1024) - 标签
  • seo_title: VARCHAR(512) - SEO标题
  • seo_description: TEXT - SEO描述
  • seo_keywords: VARCHAR(1024) - SEO关键词
  • image_src: VARCHAR(500) - 图片URL
  • create_time: DATETIME - 创建时间
  • update_time: DATETIME - 更新时间
  • shoplazza_created_at: DATETIME - 店匠创建时间
  • shoplazza_updated_at: DATETIME - 店匠更新时间

SKU表(shoplazza_product_sku)

主要字段:

  • id: BIGINT - 主键ID(对应variant_id)
  • spu_id: BIGINT - SPU ID(关联字段)
  • title: VARCHAR(500) - 变体标题
  • price: DECIMAL(10,2) - 价格
  • compare_at_price: DECIMAL(10,2) - 原价
  • sku: VARCHAR(100) - SKU编码
  • inventory_quantity: INT(11) - 库存数量
  • option1: VARCHAR(255) - 选项1
  • option2: VARCHAR(255) - 选项2
  • option3: VARCHAR(255) - 选项3