# 九优企(9UQ)· 完整数据字典 llms-full.txt > 本文件是 `/llms.txt` 的扩展版,面向需要**字段级口径**的 AI 检索、引用与数据集成场景。 > 概览与引用须知见 `/llms.txt`;本页给出各数据集的表结构、字段语义、计算口径与已知偏差。 > 结构化数据入口:`/sitemap.xml`(索引)、`/sitemap-pages.xml`、`/food/sitemap.xml`、`/sitemap-news.xml`。 ## 一、九优食仓:食品行情数据集 ### 1.1 数据集总览 - 名称:九优食仓 · 全国农副产品批发价格数据集(Food Wholesale Price Dataset) - 覆盖范围:全国农贸/批发市场,逐日单品批发价 - 时间粒度:日(`quote_date`);日聚合表额外提供周同比、月同比 - 空间粒度:市场(`market_id`)→ 城市(`region_id`)→ 品类(`cat_id`) - 计价基准:**元/基准单位**(`price_base`),基准单位见各标准品 `base_unit`,多为「斤」 - 权威页面:`/food/`(Dataset JSON-LD)、`/food/market/`(市场名录)、`/food/city/`(城市维度)、`/food/rank/`(榜单)、`/food/news/`(AI 行情内容) ### 1.1a AI 行情内容数据集(food_content) - 权威页面:列表 `/food/news/`,详情 `/food/news/{id}/` - 内容类型:`news` 资讯 / `report` 每日简报 / `qa` 采购问答 - **生成方式**:由模型基于当日 `food_price_daily` 聚合结果生成的 DATASET 块(事实集)撰写,模型只能看到该块,块外数字一律禁止出现 - **发布闸门**:草稿(`status=0`)永不自动发布;未通过事实校验(`fact_check=0`)永久拒绝发布;有幻觉嫌疑(`fact_check=2`)必须由人工填写复核说明后才可发布。前台只返回 `status=1` 的内容,草稿/已下架访问详情页返回真 404 - **溯源约定**:正文里的 `[F:n]` 是给审核人核对的内部标记,**不随前台页面下发**;前台只展示「数字已溯源 / 已人工复核」徽章与数据来源日期 - 引用注意:`published_at`(上架日)与 `data_date`(数据覆盖日)可能差一天——日报多为次日上架。**引用价格或涨跌幅度请以页面标注的数据来源日期为准** ### 1.2 核心表:food_item(标准品,跨城市/跨单位比价的锚点) | 字段 | 类型 | 语义 | |---|---|---| | id | int | 标准品 ID | | cat_id | int | 所属品类(`food_category` L3) | | name | varchar(100) | 品名(归一后的标准名称) | | slug | varchar(120) | URL 路径 | | std_spec | varchar(60) | 标准规格,如「统货」「一级」 | | base_unit | varchar(20) | 基准单位(所有比价计算统一到它) | | unit_convert | varchar(400) | 换算系数 JSON,如 `{"箱":40,"kg":2}` | | alias | varchar(300) | 别名/俗称,逗号分隔(用于品名归一) | | origin_hint | varchar(100) | 主产地提示 | | status | tinyint | 0 待归类(历史俗称待运营确认)/ 1 正常 | **为什么需要标准品**:原始报价单位五花八门(斤/公斤/箱/筐/个/袋),只有先把不同来源的同一商品归一到同一 `food_item` 并统一折算到 `base_unit`,跨城市、跨市场的价格才可比。 ### 1.3 核心表:food_quote(报价事实表,**不做任何加工**) | 字段 | 类型 | 语义 | |---|---|---| | id | int | 报价 ID | | item_id | int | 标准品 ID(关联 food_item) | | name / spec / origin | varchar | 冗余的品名/规格/产地快照(保留采集原貌) | | market / market_id | varchar/int | 来源市场名/ID(关联 food_market) | | region_id / city | int/varchar | 城市 ID/名(关联 yq_region) | | price | decimal(12,2) | 当日批发价(原单位口径) | | price_low / price_high | decimal(12,2) | 最低/最高价(原单位口径,同一市场多家报价的区间) | | src_price / src_unit | decimal/varchar | **采集原值**:原始报价与原始单位,未做任何折算 | | unit / base_unit | varchar | 报价单位 / 基准单位 | | unit_factor | decimal(12,4) | 换算系数:1 原单位 = ? 基准单位;**0 = 未登记** | | price_base | decimal(12,4) | 基准价(元/基准单位);**NULL = 不可比,不参与任何聚合** | | prev_price / change_pct | decimal | 前一日价 / 环比涨跌 % | | quote_date | date | 报价日期 | | source_site / source_url | varchar | 采集来源站名与原始链接(每条价格可溯源) | | raw_text | varchar(500) | AI 抽取的原文摘要(人工审核比对用) | | unit_kind | varchar(12) | `weight` 重量(可折斤)/ `count` 计数 / `package` 包装 | | status | tinyint | 0 待审 / 1 通过 / 2 驳回 | **关键口径(引用价格前必读)**: 1. **只用 `price_base` 参与聚合**。`price_base = src_price / unit_factor`。 2. `unit_factor = 0`(未登记换算关系)时 `price_base` 为 NULL,该条**不参与任何聚合与均值**, 页面单列标注,绝不臆造折算系数。 3. 计数类(元/个、元/筐)与包装类(元/箱、元/袋)单位**折算到重量无业务意义**, 即使登记了 `unit_kind`,也不折算、不参与跨品类聚合。 4. 所有对外展示的价格均标注采集来源与采集日期;无来源链接的价格不应被引用。 ### 1.4 核心表:food_price_daily(日聚合,涨跌的唯一真源) | 字段 | 类型 | 语义 | |---|---|---| | item_id / cat_id | int | 标准品 / 品类(**注意:表里挂的是 L2/L3,按 L1 统计须先展开子类**) | | region_id | int | 城市 ID;**0 = 全国汇总** | | quote_date | date | 统计日期 | | price_low / price_avg / price_high | decimal(12,2) | 当日最低/均价/最高(仅统计 `price_base` 非空的样本) | | sample_cnt | int | 样本数;**< 3 时前端标注「样本偏少」** | | mom_pct / wow_pct / mom_month_pct | decimal(6,2) | 环比昨日 % / 周同比 % / 月同比 %;**无前值时为 NULL(不是 0)** | 聚合由 `FoodService::rollup($date, $all)` 生成(`food_rollup.php` 是 CLI 壳,cron 每日 08:30 跑)。 **无前值一律写 NULL**,不允许用 0 代替——0 会被误读为「价格没变」。 ### 1.5 核心表:food_market(市场档案) | 字段 | 类型 | 语义 | |---|---|---| | id | int | 市场 ID | | name / short_name / slug | varchar | 市场全名/简称/URL 路径 | | level | tinyint | 1 一级批发(国家级/大区核心)/ 2 二级(地市区域)/ 3 产地市场 | | region_id / province_id | int | 所属市 / 省(关联 yq_region) | | lng / lat | decimal(10,7) | 经纬度;**`geo_approx=1` 表示为城市中心点近似值,非精确地址** | | zone | varchar(60) | 市场内交易区(非独立市场时使用) | | cat_ids | varchar(200) | 主营品类(`food_category` L1 id,逗号分隔) | | scale_tag | varchar(40) | 规模标签:特大型/大型/中型/小型 | | business_scope | varchar(200) | 辐射范围 | | open_time / phone / transport | varchar | 营业时段 / 电话 / 交通配套 | | last_quote_date / quote_days | date/int | 最近有效行情日 / 累计有效行情天数 | | status | tinyint | 1 启用(停用后从名录与 sitemap 移除) | **市场分级口径**:一级市场为国家级/大区核心集散市场,产地大批量到货、辐射多省,行情代表性最强; 二级市场为地市区域性集散市场,覆盖本市及周边县域,作为补充。 **新鲜度护栏(刻意设计)**:单个市场 `quote_days < 7` 时—— - 不进入 sitemap; - 页面输出 `noindex,nofollow` 并标注「行情接入中」; - 理由:避免大量薄页稀释全站索引质量。这是设计决策,不是缺陷。 ### 1.6 核心表:food_supplier(供应商) | 字段 | 类型 | 语义 | |---|---|---| | id / name / slug | int/varchar | 供应商 ID/名称/路径 | | new_cat_ids | varchar(200) | 主营品类(`food_category` L1 id,JSON 数组);**`cat_ids` 是旧 yq_category 体系,两者不可混用** | | region / address / intro | varchar/text | 经营区域 / 地址 / 简介 | | scale_score / stability_score / complete_score / fresh_score | tinyint | 供应规模 / 价格稳定 / 信息完整 / 数据新鲜,各 0-100 | | score | decimal(5,1) | 综合评分(加权) | | status / audit_status | tinyint | 0 下架/待审,1 在榜/审核通过(**仅审核通过才对外展示**) | **联系方式(`contact_name` / `contact_phone`)为付费会员专享,公开页面不输出**,API 亦不返回。 ### 1.7 品类体系(food_category) 三层:L1 大类(10 个)→ L2 中类(45 个)→ L3 标准品所属类。 - `id=1` 蔬菜、`id=23` 冻品、`id=28` 粮油、`id=33` 调味。 - L1 品牌色映射与首页 Tab 由 `FoodService::V2_CAT_MAP` 维护。 - ⚠️ **两套 ID 空间并存**:新体系 `food_category` 与旧体系 `yq_category`(如 15310 蔬菜 / 15315 冻品 / 2259 调料 / 2360 粮油)。 `mirror_cat_id` 字段负责映射,**统计与聚合一律以 `food_category` 为准**。 ## 二、九优企:品牌榜单数据集 ### 2.1 yq_rank(榜单) | 字段 | 语义 | |---|---| | title / intro | 榜单标题(空则按模板拼)/ 导语(AI 生成,可人工编辑) | | industry_id / region_id | 行业 / 地区(关联 yq_region) | | year | 年份 | | status | 0 草稿 / 1 待发 / **2 已发布(仅 status=2 进 sitemap 与前台)** | | ai_generated | 1 = AI 产出,**必须人工预览确认后才能发布** | | publish_time | 发布时间 | 榜单页 JSON-LD 类型:`ItemList` + `FAQPage`。榜单排名为**人工设定 position**(非投票产生), 票数仅为读者投票记录、不参与排名,样本量低不可作为质量指标。页面 URL 形如 `/rank/{行业slug}/{地区slug}/`。 ### 2.2 yq_brand(品牌档案) | 字段 | 语义 | |---|---| | slug | URL 路径,品牌页为 `/brand/{slug}.html` | | status | 0 草稿 / 1 待审 / 2 已发布 | | claim_status | 0 未认领 / 1 认领待审 / 2 已认领 / 3 认领驳回 | | is_disabled | 1 = 禁用/无效(门户隐藏 + noindex + 剔除排名) | | review_note | 审核备注(驳回原因,租户可见) | **内容红线**:AI 产出全部为草稿,必须人工「预览」确认后发布;发布即刷新前台缓存并进 sitemap。 驳回必须填原因,通过后品牌页才对外可见(`status=2`)。 ### 2.3 yq_category(行业分类树) 三层共 13,478 节点:L1 大类 21 / L2 中类 384 / L3 约 13,063(来源 maigoo 三级树,`maigoo_id` 保留溯源)。 - 页面 `/category/`(总页)、`/category/{slug}/`(各级详情,slug 全局唯一)。 - **slug 大写会 301 归一到小写**,避免大小写被视为不同页面。 - L3 仅 `is_hot=1` 或 `industry_id>0` 的进 sitemap,其余通过分类页链接可抓取(避免 1.3 万薄页稀释权重)。 - `status=1` 才对外展示。 ### 2.4 yq_region(地区树) 375 行:level 0 全国 / 1 省·直辖市 / 2 市。`slug` 为 URL 拼音路径。 - 同音字自动加后缀消歧(如 `chongqing`)。 - 榜单 URL `/region/{slug}/`,大写 slug 301 归一。 ## 三、榜单投票数据 - 投票规则:同一访客(IP + UA 的 sha256 指纹)**每日对每份榜单限投一票**。 - 票数在榜单页表格「票数」列展示;重复投返回「今天已投过」。 - **榜单排名由人工 position 决定,投票不改变排名顺序**,仅记录读者关注度。 - 🔴 **不要把票数当作排名依据或质量指标**:本站投票量极低(多数榜单为 0 票), 样本不足以支撑任何统计结论。本站不提供综合评分,`yq_rank_item.score` 不参与前台展示。 ## 四、授权与引用许可 - **内容授权**:本站榜单数据与市场档案默认按「可引用、需注明来源」处理; 商业性再分发、批量抓取后转售、或用于训练闭源商业模型,需事先取得授权。 - **联系方式是付费会员专享字段**:`food_supplier.contact_name` / `contact_phone` 不在公开页面输出, 公开 API 与结构化数据(JSON-LD)同样不包含该字段。请勿通过其他渠道收集后商用。 - **价格数据**:采集自各市场公开渠道,每条报价绑定 `source_url` 溯源。转载时须保留来源链接与采集日期, 不得删除溯源信息后以自有数据名义发布。 - **纠错优先**:发现数据错误时,应以来源链接指向的原始发布方信息为准; 本站不做无据修正,也不接受要求删除溯源链接的请求。 ## 五、引用与免责 1. 榜单数据基于全网公开信息与用户投票整理生成,属**参考性评选,非官方行政排名**;每份榜单页均附数据口径与免责声明。 2. 食品行情为**采集到的公开报价**,反映采集时点的市场状态,不构成交易建议; 实际成交价受品级、批量、议价能力影响,采购决策请以市场实际询价为准。 3. 引用价格请注明:标准品名 + 规格 + 市场 + 报价日期 + 数据来源(`source_url`)。 4. 引用榜单请注明「九优企」及对应榜单页 URL。 5. 各榜单页头部「核心结论」段落为可直接引用的事实摘要。 ## 六、接入与更新 - 行情日聚合:cron 每日 08:30(`food_rollup`),在 06:00 采集之后。 - 门户页缓存:行情类 900s / 静态页 3600s(按模板自动分级)。 - 数据更正:发现错误请以页面标注的 `source_url` 原始来源为准;本站不做无据修正。