01概览
鲸准 MCP Server 是鲸准数据面向 AI 应用提供的 MCP 服务。它把鲸准的投融资数据库封装为标准 MCP 工具,任何支持 MCP 协议的客户端接入后即可直接查询。
from 参数分页1.1 能力边界
先明确这个服务能做什么、不能做什么,可以避免把时间花在走不通的路上。
| 维度 | 说明 |
|---|---|
| 能做 | 按任意条件检索 17 个索引的原始明细记录,支持深分页(用 from 翻页)。 |
| 不能做 | 分组统计、聚合排序、一次取回大批量数据 —— 受「单页 10 条」与「不支持聚合」两项限制。 |
| 适合 | 明细查询、对话式问答、指标核对、单条或小批量取数。 |
| 不适合 | 批量导出全量数据、行业宏观报表、依赖服务端聚合的统计分析。 |
部分索引已内置预计算好的统计值,例如 jingdata_industry_v2 的 project_num(该标签下项目数)、
com_count(企业数),以及 jingdata_industry_chain 的 com_count、listed_count 等。
这类需求直接读字段即可,不需要也不应该自行聚合。
1.2 数据覆盖
- 投融资交易事件 —— 投资方、被投方、交易时间、融资轮次、金额、行业、地区、业务标签
- 创业项目与企业工商 —— 项目档案、简介、工商注册、注册资本、经营状态
- 机构与基金 —— 投资机构、基金、基金管理人、基金对外投资记录
- LP 数据 —— 出资人基本信息与对外投资记录
- 行业与赛道 —— 行业标签维表(含项目数与热度)、一级 / 二级市场热门赛道
- 产业链 —— 节点结构与企业归属关系、节点 × 地区经营统计、财务分析、估值序列、市场涨跌幅
1.3 我要查什么 → 用哪个索引
17 个索引按数据主题分为交易与项目、机构与基金、LP 数据、行业与赛道、产业链五类。 下表按常见业务问题给出入口,点击索引名可直达其字段结构。
| 我想查… | 用哪个索引 | 关键字段与注意点 |
|---|---|---|
| 某天的投融资 / 并购事件 | jingdata_large_transaction |
finance_date 时间范围 + finance_phase 轮次;不支持聚合,需分页自行累计 |
| 某赛道 / 关键词下的创业项目 | jingdata_project |
细分领域走 tags_v2(nested);一级行业用 industry_v2.id |
| 某企业的工商信息 / 简介 / 注册资本 | jingdata_company |
name 用 match;字段随记录变化,不少企业无简介或融资信息 |
| 某产业链节点下的企业(可按地区筛) | searchCompaniesByChainNode产业链专用工具 |
传节点 ID 即可,地区支持省 / 市 / 县任意层级。详见 产业链专节 |
| 某节点在全国 / 某地的企业数与经营指标 | jingdata_industry_chain |
chain_id + level(此处 level 是地理粒度) |
| 某节点的估值与市场表现趋势 | …_evolution_analysis |
用 code 区分沪深300与行业个股两条序列,不要混读 |
| 某机构的基本信息 / 投资案例 | jingdata_org / jingdata_investment |
基金对外投资记录已由服务端强制注入过滤条件,直接查业务条件即可 |
| 某基金 / 基金管理人的备案信息 | jingdata_fund / …_fund_manager |
部分编码字段暂未开放字典,见 字段字典 |
| 某 LP 的出资与对外投资 | jingdata_lp_info / …_lp_invest_info |
基本信息与投资记录分属两个索引,配合使用 |
| 行业标签、赛道热度与排行 | jingdata_industry_v2 / …_track |
维表已内置项目数、热度等统计值,直接读字段 |
| 产业链有哪些节点、层级怎么分 | …_chain_particulars |
查企业的第一步,chain_id 是全局唯一的节点 ID |
服务提供的是原始数据检索能力,不提供聚合统计与可视化。所有统计分析需要在调用方完成(详见使用限制)。
接入范围与数据使用方式以双方约定为准。访问令牌仅限申请方在约定的服务端环境内使用,请勿公开或转授予第三方。
02快速开始
2.1 接入信息
| 项目 | 值 |
|---|---|
| 服务端点 | https://mcp.jingdata.com/sse |
| 传输方式 | Streamable HTTP(向 /sse 发送 POST 请求) |
| 认证方式 | HTTP 请求头 Authorization: Bearer <TOKEN> |
| 请求 / 响应 | JSON-RPC 2.0 |
| 字符编码 | UTF-8 |
/sse,但传输方式是 Streamable HTTP —— 这是最容易踩的坑
必须使用 POST 方法发送 JSON-RPC 请求。直接对 /sse 发起 GET 会返回 400。部分 MCP 客户端需要在配置中显式指定传输类型为 http / streamable-http,否则会按经典 SSE 处理导致连接失败。
认证
所有请求都必须在请求头携带访问令牌。令牌请向鲸准对接人申请,请勿将令牌写入前端代码或公开仓库。
缺少或令牌无效时,服务返回 HTTP 401 与 {"code": -32001, "message": "Missing or invalid Authorization header"}。请在服务端保存并转发令牌,避免在浏览器 / 客户端明文暴露。
2.2 客户端配置
支持 MCP 的客户端(AI 助手、IDE 插件、Agent 框架等)通常通过一份 JSON 配置接入。以下为通用写法:
{
"mcpServers": {
"jingdata": {
"type": "http",
"url": "https://mcp.jingdata.com/sse",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}不同客户端对传输类型的键名可能是 type / transport,请求头可能是 headers / httpHeaders,URL 键可能是 url / serverUrl。请以所用客户端的文档为准。
配置后连不上?按这个顺序排查
- 传输类型选错了:本服务使用 Streamable HTTP,不是经典 SSE。若客户端要求指定类型,
请选
http/streamable-http,不要选sse。 - URL 用了 http:必须使用
https。用http会先收到跳转,而部分客户端不跟随跳转,表现为连接失败。 - 路径不完整:完整地址是
https://mcp.jingdata.com/sse,路径/sse不能省略。 - 认证头格式不对:必须是
Authorization: Bearer <TOKEN>,Bearer与令牌之间有一个空格,前缀不能省略。 - 自定义请求头没生效:部分客户端需要把认证头写在专门的 headers 字段里,而不是环境变量。
2.3 连接与调用流程
- initialize —— 客户端发送初始化请求,与服务端建立会话。
- notifications/initialized —— 初始化完成通知(可选,部分客户端需要)。
- tools/list —— 获取可用工具清单(可选,用于动态发现)。
- tools/call —— 调用具体工具执行查询。
初始化响应的 HTTP 头会返回 Mcp-Session-Id,后续请求建议携带该会话标识以复用会话。加密传输请始终使用 https。
一次完整的工具调用请求
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"arg0": "jingdata_project",
"arg1": "{\"query\":{\"match_all\":{}},\"size\":10,\"track_total_hits\":true}"
}
}
}search 的查询语句是「字符串」而非对象
arg1 需要传入 JSON 文本(序列化后的字符串),而不是 JSON 对象。这是调用时最常见的报错原因。
2.4 原生调用示例
下面这段 Python 代码不依赖任何 SDK,直接通过 HTTP 完成接入与查询,可直接作为对接起点:
import http.client, json, time
HOST = "mcp.jingdata.com"
TOKEN = "Bearer <YOUR_TOKEN>" # 向鲸准申请获取
MCP_VERSION = "2024-11-05" # MCP 协议版本参数,需与客户端声明一致
session = None
def post(msg):
global session
c = http.client.HTTPSConnection(HOST, timeout=60)
h = {
"Authorization": TOKEN,
"Content-Type": "application/json",
"Accept": "application/json, text/event-stream",
}
if session:
h["Mcp-Session-Id"] = session
c.request("POST", "/sse", body=json.dumps(msg), headers=h)
r = c.getresponse()
sid = r.getheader("Mcp-Session-Id")
if sid:
session = sid # 会话复用
raw = r.read().decode("utf-8", "replace")
c.close()
for line in raw.splitlines(): # 兼容 SSE 分片格式
if line.startswith("data:"):
return json.loads(line[5:].strip())
return json.loads(raw)
def initialize():
post({"jsonrpc": "2.0", "id": 1, "method": "initialize",
"params": {"protocolVersion": MCP_VERSION, "capabilities": {},
"clientInfo": {"name": "my-app", "version": "1.0"}}})
post({"jsonrpc": "2.0", "method": "notifications/initialized", "params": {}})
def call_tool(name, arguments):
return post({"jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": {"name": name, "arguments": arguments}})
# ---- 用法:查最近一个完整交易日的全部投融资交易事件 ----
from datetime import date, timedelta
initialize()
day = date.today() - timedelta(days=1) # 最近一天,可按需替换
dsl = json.dumps({
"query": {"bool": {"filter": [
{"range": {"finance_date": {
"gte": day.isoformat(),
"lt": (day + timedelta(days=1)).isoformat()}}}]}},
"sort": [{"finance_date": {"order": "desc"}}, {"_id": {"order": "asc"}}],
"size": 10, "from": 0, "track_total_hits": True,
}, ensure_ascii=False)
resp = call_tool("search", {"arg0": "jingdata_large_transaction", "arg1": dsl})
# 大响应会被切成多个 content 分片,必须直接拼接(不要用 "\n".join)
text = "".join(c.get("text", "") for c in resp["result"]["content"])
data = json.loads(text)
print(data["hits"]["total"], "条交易事件")
2.5 完整取数函数(复制即可用)
上一节只演示了发一次请求。实际取数还需要处理分页、去重、错误判定与重试 —— 下面这个函数已经把这些都封装好, 可直接接在上一段代码之后使用:
import time
def fetch_all(index, query, page_size=10, max_pages=None):
"""分页拉取一个索引的全部命中记录。
已按本服务的约定处理:单页上限 10、稳定排序、按 _id 去重、
错误正文判定、响应分片拼接、失败退避重试。
依赖上一个示例中的 call_tool()。
"""
rows, seen, page = [], set(), 0
while max_pages is None or page < max_pages:
sort = list(query.get("sort") or [])
if not any(k in ("id", "_id") for s in sort for k in s):
sort.append({"id": {"order": "asc"}}) # 稳定分页的次级排序
dsl = dict(query)
dsl["sort"] = sort
dsl["size"] = page_size
dsl["from"] = page * page_size
dsl["track_total_hits"] = True
data = None
for attempt in range(4): # 最多重试 3 次
try:
r = call_tool("search", {
"arg0": index,
"arg1": json.dumps(dsl, ensure_ascii=False),
})
result = r.get("result", {})
# 大响应会被切成多个 content 分片,必须直接拼接
body = "".join(c.get("text", "") for c in result.get("content", []))
if result.get("isError") or not body.strip():
raise RuntimeError("isError 或响应正文为空")
data = json.loads(body)
if "error" in data:
raise RuntimeError(data["error"]) # 如 size 超限、聚合被拒
break
except Exception:
if attempt == 3:
raise
time.sleep(2 ** attempt) # 退避重试
hits = data["hits"]["hits"]
if not hits:
break
for h in hits: # 按 _id 去重
if h["_id"] not in seen:
seen.add(h["_id"])
rows.append(h["_source"])
if len(hits) < page_size: # 已到最后一页
break
page += 1
return rows
# ---- 用法:拉取近 30 天的交易事件(最多 5 页) ----
from datetime import date, timedelta
since = (date.today() - timedelta(days=30)).isoformat()
rows = fetch_all("jingdata_large_transaction", {
"query": {"bool": {"filter": [
{"range": {"finance_date": {"gte": since}}}]}},
}, max_pages=5)
print(len(rows), "条")
① 单页 10 条的 size 限制与 from 翻页;② 追加 id 作为次级排序,避免翻页时重复或漏数据;
③ 按 _id 本地去重;④ 判定 isError 与空响应正文,失败时退避重试。
03工具说明
服务共提供 6 个工具。通用查询建议的顺序是:先 getIndexes 了解有哪些索引 → getMapping 确认字段名与类型 → 再 search 查询。涉及枚举值(如融资轮次、国家编码)时,用 getDictsByName 取标准编码。产业链相关的查询请使用两个专用工具(searchCompaniesByChainNode / getCompanyChainLayer),不要自行拼装 DSL。
| 工具 | 参数 | 说明 |
|---|---|---|
getIndexes |
无 | 返回服务提供的全部数据索引清单(索引名 + 中文描述)。用于确认当前可用的数据范围。 |
getMapping |
arg0:索引名 |
返回该索引的字段结构:字段名、数据类型、中文含义,以及字段关联的枚举字典名。查询前请先确认字段,避免字段名拼写错误。 |
search |
arg0:索引名arg1:查询语句 |
执行查询。arg1 为标准 Elasticsearch DSL 的 JSON 字符串。返回标准 ES 响应结构(hits.hits 数据、hits.total 总量)。 |
getDictsByName |
arg0:字典名 |
返回枚举字典的 {编码: 名称} 映射,例如融资轮次字典 focus_phase。查询结果中的轮次等字段为编码,需用字典还原为中文。 |
searchCompaniesByChainNode产业链专用 |
arg0:节点 IDarg1:行政区划编码arg2:偏移量arg3:每页数量 |
按产业链节点查企业。传入节点 ID(chain_id)即可返回该节点下的关联企业,arg1 可按地区收窄。封装了节点关联与地区匹配逻辑,无需自行拼装 DSL。详见 5.3。 |
getCompanyChainLayer产业链专用 |
arg0:公司 IDarg1:公司名称arg2:偏移量arg3:每页数量 |
查企业所属的产业链。返回该企业所属产业链的完整层级路径与关联节点 ID 数组,用于回答「这家公司在哪些产业链上」。arg0 与 arg1 二选一,优先使用公司 ID。详见 5.3。 |
arg0 / arg1
工具参数使用位置命名,不是 index / query。getIndexes 传空对象 {} 即可。
调用示例
① 列出全部索引
{}② 查看某索引的字段结构
{
"arg0": "jingdata_large_transaction"
}③ 读取融资轮次字典
{
"arg0": "focus_phase"
}04数据索引
当前开放 17 个可查询索引,其中 5 个为产业链专题索引。每个索引均提供完整的字段结构,展开「字段结构」即可查看字段名与含义。
数据规模以量级标注。鲸准数据持续更新与增长,精确总量请在查询时用 track_total_hits: true 读取 hits.total 获取实时值。
| 索引 | 内容 | 数据量级 |
|---|---|---|
jingdata_large_transaction | 投融资 / 并购交易事件 | 十万级 |
jingdata_project | 创业项目档案 | 百万级 |
jingdata_company | 企业工商信息(含产业链归属) | 亿级 |
jingdata_org | 投资机构档案 | 十万级 |
jingdata_fund | 基金基本信息 | 十万级 |
jingdata_fund_manager | 基金管理人 | 万级 |
jingdata_investment | 基金对外投资记录 | 十万级 |
jingdata_lp_info | LP(出资人)基本信息 | 万级 |
jingdata_lp_invest_info | LP 对外投资记录 | 十万级 |
jingdata_industry_v2 | 行业标签维表(含项目数 / 热度) | 万级 |
jingdata_industry_track | 一级市场热门赛道 | 百级 |
jingdata_secondary_market_hot | 二级市场热门板块 | 百级 |
jingdata_industry_chain_particulars | 产业链节点基本信息(结构 / 层级 / 完整路径) | 千级 |
jingdata_industry_chain | 产业链节点 × 地区经营统计 | 百万级 |
jingdata_industry_chain_analysis | 产业链节点 × 地区财务分析 | 百万级 |
jingdata_industry_chain_evolution_analysis | 产业链节点估值序列 | 百万级 |
jingdata_industry_chain_market_applies | 产业链节点市场累计涨跌幅 | 千万级 |
05产业链数据
鲸准产业链体系把每个产业自上而下拆解为多层级节点:产业链 → 环节 → 细分领域 → 末级节点。围绕这套结构,平台提供 5 个产业链专题索引,覆盖节点结构、企业经营统计、财务分析、估值序列与市场涨跌幅。
5.1 五个产业链索引
| 索引 | 用途 |
|---|---|
jingdata_industry_chain_particulars |
节点字典。查产业链结构——节点名称、层级、父节点、完整路径。查企业前先在这里取节点 ID。 |
jingdata_industry_chain |
节点 × 地区经营统计。企业数量、融资企业数、融资笔数、上市公司数、总市值、营收、利润、市盈率、市净率。 |
jingdata_industry_chain_analysis |
节点 × 地区财务分析。按会计年份的 A 股 / 港股 市值、总营收、总利润。 |
jingdata_industry_chain_evolution_analysis |
节点估值序列。逐日的静态 / 滚动市盈率、市净率、市销率、市现率、总市值,可与沪深300对比。 |
jingdata_industry_chain_market_applies |
节点市场涨跌幅。按地区、按时间窗口的行业累计涨跌幅与沪深300涨跌幅。 |
5.2 节点与节点 ID
每个节点有一个全局唯一的数字 ID(chain_id),跨产业链不重复——它是一切产业链查询的关联键。
chain_id—— 节点 ID,后续查企业、查统计都用它name—— 节点名称level—— 节点层级(顶层产业链为第 1 层,逐级向下)parent—— 父节点(id+name)chain_id_path—— 从根节点到自身的完整层级路径
按名称查找节点时,务必使用 term + name.keyword 精确匹配;使用 match 会命中大量名称相近的衍生节点。
{
"query": {
"term": {
"name.keyword": "开放数据平台"
}
},
"size": 10,
"track_total_hits": true
}5.3 如何查询产业链节点下的企业
服务为产业链场景提供了两个 MCP 专用工具,产业链的查询一律走它们:
· searchCompaniesByChainNode —— 查某个节点下有哪些企业,可按地区收窄
· getCompanyChainLayer —— 查某家企业归属于哪些产业链节点
节点关联与地区匹配的逻辑已封装在工具内部,不需要、也不建议自行拼装 DSL。
第一步:取得节点 ID
节点 ID(chain_id)是产业链查询唯一需要的关联键,先从节点字典中取得(方式见 5.2):
{
"query": {
"term": {
"name.keyword": "开放数据平台"
}
},
"size": 10,
"track_total_hits": true
}第二步:查该节点下的企业
把节点 ID 作为 arg0 传给 searchCompaniesByChainNode,即返回该节点下的全部企业。返回结构与 search 一致(hits.hits 为数据、hits.total 为总量)。
{
"arg0": "80",
"arg3": 10
}| 参数 | 是否必填 | 说明 |
|---|---|---|
arg0 |
必填 | 产业链节点 ID,取自 jingdata_industry_chain_particulars 的 chain_id。请勿臆造节点 ID。 |
arg1 |
可选 | 行政区划编码,不传表示全国。详见下方「按地区收窄」。 |
arg2 |
可选 | 结果偏移量,从 0 开始,默认 0。分页时按每页数量递增。 |
arg3 |
可选 | 每页返回数量,默认 10,上限 10。要求 arg2 + arg3 ≤ 10000,超出会被拒绝并提示。 |
按地区收窄
arg1 接受 省、市、县任意层级的 6 位行政区划编码(GB/T 2260),服务端会自动判断层级并匹配,无需指定粒度:
| 层级 | 行政区划编码 | 调用参数 |
|---|---|---|
| 省级 | 广东省 440000 |
{"arg0": "80", "arg1": "440000", "arg3": 10} |
| 市级 | 深圳市 440300 |
{"arg0": "80", "arg1": "440300", "arg3": 10} |
| 县级 | 深圳市南山区 440305 |
{"arg0": "80", "arg1": "440305", "arg3": 10} |
三种写法的粒度不同,服务端会自动匹配对应层级,无需额外声明。省 / 市 / 县编码均采用 GB/T 2260 的 6 位数字。
① 必须传 6 位数字编码,不要传「深圳」这类中文地名。
② 结果仅覆盖中国境内企业(address1 = 150)。
反向查询:某家企业属于哪些产业链
使用 getCompanyChainLayer。arg0(公司 ID)与 arg1(公司名称)二选一必填其一,优先传公司 ID,命中更准:
{
"arg0": "legal-4qjgm3c6t2",
"arg3": 10
}| 参数 | 是否必填 | 说明 |
|---|---|---|
arg0 |
二选一 | 公司 ID(精确匹配)。优先使用。 |
arg1 |
二选一 | 公司名称关键词(短语匹配,同时检索简称与全称)。仅在拿不到公司 ID 时使用。 |
arg2 |
可选 | 结果偏移量,从 0 开始,默认 0。 |
arg3 |
可选 | 每页返回数量,默认 10,上限 10。 |
arg0 与 arg1 都不传会被拒绝,返回「companyId 与 companyName 至少提供一个」;两个都传时以 arg0 为准。
返回结果中,industry_chain_layer 是该企业所属产业链的完整路径(逐层嵌套,最内层为末级节点);related_node_ids 是关联节点 ID 数组,可直接用于反查同一节点下的其他企业:
[
{
"name": "人工智能产业链",
"id": "chain-19b20d6a969kbxd",
"child": {
"name": "基础层",
"id": "63",
"child": {
"name": "数据资源",
"id": "67",
"child": {
"name": "开放数据平台",
"id": "80"
}
}
}
}
]arg1 为短语匹配,会同时检索企业简称与全称,可能命中多家名称相近的公司。返回多条时应结合 full_name 判断是否为目标企业;能拿到公司 ID 就一定用公司 ID。
排序与分页
该工具的结果已由服务端固定排序(先按 sort_type 升序、再按 sort_date 降序),顺序稳定,翻页时直接递增 arg2 即可,无需自行构造排序条件。
search 手写节点查询
企业的产业链归属记录在 jingdata_company 索引的 related_node_ids(节点 ID 数组)与 industry_chain_layer(层级路径)两个字段中。早期做法是在 search 里用 term 匹配 related_node_ids 并自行叠加地区条件,现已由 searchCompaniesByChainNode 统一封装,请不要再手写这段逻辑。
另外该索引的数据为工商与融资混装,字段随记录变化,不少企业没有简介、融资、人数等信息,读取时需按字段可能缺失处理。
5.4 节点 × 地区的经营统计
需要「某节点在全国 / 某省 / 某市的企业数量、融资与上市情况」时,查 jingdata_industry_chain,用 chain_id 配合 level(地区粒度:1 国家 / 2 省 / 3 市 / 4 区县)定位:
{
"query": {
"bool": {
"filter": [
{
"term": {
"chain_id": "80"
}
},
{
"term": {
"level": "1"
}
}
]
}
},
"size": 10,
"track_total_hits": true
}5.5 时间序列与市场表现
以下两个索引同样以 chain_id 关联节点,用于观察趋势:
jingdata_industry_chain_evolution_analysis—— 节点逐日估值指标(静态 / 滚动市盈率、市净率、市销率、市现率、总市值)。用code区分「沪深300」与「行业个股」两条序列,不要混读。jingdata_industry_chain_market_applies—— 节点累计涨跌幅。用type区分时间窗口(1近一月 /2近三月 /3近一年 /4近三年),查询时必须锁定单一type,否则不同窗口的数据混在一条序列里会呈现无意义的跳变。
同理,财务分析索引 jingdata_industry_chain_analysis 的 record_type(1 市值 / 2 总营收 / 3 总利润)也需按指标类型分别查询,不宜混列。
06字段字典
部分字段在数据中存储为编码,需要结合字典还原为中文名称。本页汇总:服务端可查的字典、索引内嵌的枚举、常用地区编码,以及遇到无法还原的编码时该怎么办。
6.1 focus_phase —— 融资轮次
适用于交易事件索引的 finance_phase、创业项目索引的 investment_phase 等字段。查询时传编码(字符串),展示时用字典还原。
| 编码 | 轮次 |
|---|---|
5 | 种子轮 |
10 | 天使轮 |
20 | Pre-A轮 |
30 | A轮 |
35 | A+轮 |
37 | Pre-B轮 |
40 | B轮 |
45 | B+轮 |
50 | C轮 |
55 | C+轮 |
60 | D轮 |
70 | E轮及以后 |
90 | PreIPO |
100 | 并购 |
110 | 上市 |
其他取值
| 编码 | 轮次 |
|---|---|
-50 | 战略投资 |
-30 | 定增 |
-40 | 上市后 |
-100 | 未知轮次 |
0 | 未融资 |
77 | 新四板 |
80 | 新三板 |
6.2 country —— 国家编码
用于 address1 字段。当前字典仅包含:150 → 中国。
以上两个字典可通过工具 getDictsByName 实时查询,无需在本地维护。
6.3 索引内嵌枚举
以下枚举直接来自索引自身的字段定义,可直接对照使用:
机构类型(jingdata_org.record_type)
| 编码 | 机构类型 |
|---|---|
1 | VC/PE |
2 | 企业风险投资 |
3 | 市场化母基金 |
4 | 政府引导基金 |
5 | 其他类型 |
其他编码
6.4 常用地区编码
address1~address4 依次为国家 / 省 / 市 / 区县编码,采用 GB/T 2260 行政区划代码。
其中 address3 是市级编码,做城市筛选时最常用。以下为常用市级编码:
| 编码 | 城市 | 编码 | 城市 |
|---|---|---|---|
110000 | 北京市 | 420100 | 武汉市 |
120000 | 天津市 | 510100 | 成都市 |
310000 | 上海市 | 500000 | 重庆市 |
440100 | 广州市 | 610100 | 西安市 |
440300 | 深圳市 | 320100 | 南京市 |
330100 | 杭州市 | 320500 | 苏州市 |
完整行政区划编码请参照 GB/T 2260 国家标准;服务不提供地区字典查询工具。
6.5 遇到无法还原的编码怎么办
字段结构中标注为「编码」的字段还有一些(如基金类型、管理类型、主体类型等),服务端的字典工具暂未覆盖。 处理建议:
- 先在本页与 同名不同义速查 中查找是否已给出取值;
- 行政区划类编码按 GB/T 2260 标准还原;
- 其余业务编码可先按原值透传展示,不影响查询与筛选(筛选时同样传编码值);
- 确需中文对照表用于交付物时,请联系鲸准对接人索取。
07一级行业编码
项目、公司等索引的 industry_v2 字段为一级行业,共 21 个编码。使用 term 精确匹配 industry_v2.id 可获得该行业的全部记录(注意 id 需作为字符串传入)。
| 编码 | 行业名称 | 项目量级 | 操作 |
|---|---|---|---|
1 | 材料 | 万级 | |
2 | 建筑建材 | 万级 | |
3 | 电子商务 | 万级 | |
4 | 化工 | 万级 | |
5 | 教育 | 万级 | |
6 | 节能环保 | 万级 | |
7 | 金融 | 万级 | |
8 | 能源矿产 | 万级 | |
9 | 农业 | 万级 | |
10 | 企业服务 | 十万级 | |
11 | 汽车交通 | 万级 | |
12 | 社交社区 | 万级 | |
13 | 生产制造 | 十万级 | |
14 | 文体行业 | 万级 | |
15 | 物流仓储 | 万级 | |
16 | 消费生活 | 十万级 | |
17 | 新一代信息技术 | 万级 | |
18 | 医疗健康 | 万级 | |
19 | 政府及公用事业 | 千级 | |
20 | 房地产 | 万级 | |
21 | 电子信息产业 | 万级 |
「项目量级」为 jingdata_project 索引下按该一级行业统计的记录量级。数据持续增长,此处仅标示量级;精确数量请以查询返回的 hits.total 为准。
industry_v2 中
industry_v2 只覆盖上述 21 个一级行业。像「人工智能」「大模型」这类细分领域 / 概念属于业务标签,存放在 tags_v2 字段中,筛选方式见标签精确筛选。
08查询语法与示例
search 接受标准 Elasticsearch DSL。以下示例可直接替换索引名与条件使用。
8.1 基础检索
查询企业工商索引中包含「人工智能」的公司,返回前 10 条并统计总量:
{
"query": {
"match": {
"name": "人工智能"
}
},
"size": 10,
"track_total_hits": true
}8.2 统计总量
只取总数、不取明细,是最轻量的查询方式。track_total_hits 设为 true 时,hits.total 返回精确总数;不设置则可能只返回近似值或上限值。
{
"query": {
"match_all": {}
},
"size": 1,
"track_total_hits": true
}8.3 时间范围查询
查询指定日期的全部投融资交易事件,按时间倒序并分页拉取:
{
"query": {
"bool": {
"filter": [
{
"range": {
"finance_date": {
"gte": "2026-09-28",
"lt": "2026-09-29"
}
}
}
]
}
},
"sort": [
{
"finance_date": {
"order": "desc"
}
},
{
"_id": {
"order": "asc"
}
}
],
"size": 10,
"from": 0,
"track_total_hits": true
}如果只按 finance_date 排序,而当日大量记录的该字段值相同,则 from 翻页会出现重复或漏数据。请务必追加一个唯一字段作为次级排序(如 _id),并在客户端按 _id 去重。
8.4 标签精确筛选
细分领域通过 tags_v2 筛选。该字段是 nested 类型,必须使用 nested 查询并指定 path。
第一步,在行业标签维表中查到目标标签的 id:
{
"query": {
"term": {
"name.keyword": "人工智能"
}
},
"size": 3,
"track_total_hits": true
}返回结果中的 _source.id 即为标签 id(例如「人工智能」为 tag-dccb0a7af2),project_num 是该标签下的项目数量,parent_tag 为其上级行业。
term + name.keyword
name 字段采用中文分词。以「人工智能」为例:使用 term + name.keyword 可精确命中唯一匹配;若改用 match + name,会连带命中「人工智能芯片」「人工智能技术」「人工智能算法」等大量衍生标签,需要自行在结果中挑选目标标签。
第二步,用该 id 在项目索引中精确筛选:
{
"query": {
"nested": {
"path": "tags_v2",
"query": {
"term": {
"tags_v2.id": "tag-dccb0a7af2"
}
}
}
},
"size": 10,
"track_total_hits": true
}用 tags_v2.id + term 是精确命中;若改用 tags_v2.name + match,会把「人工智能芯片」「人工智能技术」等一并命中,数量会明显放大。需要精确统计请使用 id。
8.5 按地区筛选
筛选深圳市(440300)的创业项目:
{
"query": {
"term": {
"address3": "440300"
}
},
"size": 10,
"track_total_hits": true
}8.6 组合条件
用 bool 组合多个条件:filter 用于筛选(不参与相关性打分,性能更好),must 用于需要匹配的条件。
{
"query": {
"bool": {
"filter": [
{
"range": {
"finance_date": {
"gte": "2026-01-01"
}
}
},
{
"term": {
"finance_phase": "30"
}
}
],
"must": [
{
"nested": {
"path": "investor",
"query": {
"match": {
"investor.name": "红杉"
}
}
}
}
]
}
},
"sort": [
{
"finance_date": {
"order": "desc"
}
},
{
"_id": {
"order": "asc"
}
}
],
"size": 10,
"track_total_hits": true
}任何包含 aggs / aggregations 的查询都会被拒绝,返回:聚合功能已被禁用。本服务仅允许数据查询,不接受任何聚合操作(aggs/aggregations),请移除聚合参数后重试。 统计需求请在调用方对查询结果自行处理。
以下写法不可用(示例)
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"by_industry": {
"terms": {
"field": "industry_v2.name",
"size": 10
}
}
}
}09已知陷阱速查
下面 8 条是接入过程中最容易踩的坑。先扫一遍这张表,可以避开绝大部分返工。
| # | 陷阱 | 现象 / 正确做法 |
|---|---|---|
| P1 | 一次取超过 10 条 | 直接报错。size 上限为 10,用 from 分页。 |
| P2 | 在查询里带聚合 | 请求被拒绝。移除 aggs / aggregations,改在调用方统计。 |
| P3 | 排序字段存在大量重复值时翻页 | 会出现重复或漏数据。必须追加唯一字段作为次级排序。 |
| P4 | 企业索引用 _id 排序 |
直接返回空结果。必须改用 sort: [{"id": {"order": "asc"}}]。 |
| P5 | 自行拼装产业链节点查询 | 底层字段容易用错:对 industry_chain_layer 做 nested 查询会返回 0 条(它只承担展示职责,筛选须用 related_node_ids)。
请直接使用专用工具 searchCompaniesByChainNode,无需手写这段逻辑。 |
| P6 | 默认产业链路径数组的第一条就是目标链 | 一家企业可能同时属于多条产业链。getCompanyChainLayer 返回的 industry_chain_layer 是数组,
第一个元素不一定是你要找的那条链,校验时应遍历整个数组去匹配目标节点。 |
| P7 | 该用 nested 的字段没用 |
tags_v2 必须用 nested + path;industry_v2 不是 nested,用了会报 400。 |
| P8 | 用 match 做精确匹配 |
命中大量无关结果。name 这类字段要精确匹配请用 name.keyword + term。 |
P1 · 单页最多 10 条
- 现象:
size超过 10 时请求被拒绝,返回size=11 超过该服务单页最大限制10… - 正确做法:
size固定为 10(或不传),用from翻页。批量取数请用 完整取数函数。
P2 · 不支持聚合
- 现象:请求含
aggs/aggregations时被拒绝,返回「聚合功能已被禁用…」。 - 正确做法:分组统计在调用方完成;或优先查看索引里已预计算好的统计字段
(如
project_num、com_count、hot_value)。
P3 · 分页需要稳定排序
- 现象:只按一个重复值很多的字段(如
finance_date)排序时,翻页会出现重复记录或漏掉记录。 - 正确做法:在排序数组末尾追加唯一字段,例如
"sort": [{"finance_date": {"order": "desc"}}, {"_id": {"order": "asc"}}], 并在本地按_id去重。
P4 · 企业索引的排序字段
- 现象:在
jingdata_company上用sort: [{"_id": …}]会直接返回空结果。 - 正确做法:改用
sort: [{"id": {"order": "asc"}}]。
P5 · 产业链查询不要手写 DSL
- 现象:自行拼装时容易用错字段 —— 对
industry_chain_layer使用nested查询会返回 0 条; 按地区收窄时还要自行处理address1~address4的层级对应关系。 - 正确做法:直接调用专用工具
searchCompaniesByChainNode(按节点查企业,地区支持省 / 市 / 县)与getCompanyChainLayer(查企业归属),两者已封装上述逻辑。详见 产业链专节。
P6 · industry_chain_layer 是数组
- 现象:一家企业可能同时属于多条产业链,数组的第一个元素不一定是你查询的那条链。
- 正确做法:校验时遍历整个数组匹配目标节点,不要只判断第一条。
P7 · nested 用对地方
tags_v2、investor、standard1等是 nested 类型,查询必须带path。industry_v2不是 nested,对它使用 nested 查询会返回400 Bad Request。- 各字段该用什么筛选方式,可直接看索引字段表的「筛选方式」列。
P8 · 精确匹配要用 .keyword
- 现象:用
match查「人工智能」会连带命中「人工智能芯片」「人工智能技术」「人工智能算法」等大量衍生条目。 - 正确做法:需要唯一匹配时用
{"term": {"name.keyword": "人工智能"}}。
10同名不同义速查
同一字段名在不同索引里含义可能完全不同。这类错误不会报错,但结果会错 —— 比报错更危险,务必对照本表。
| 字段 | 所在索引 | 含义 | 取值范围 |
|---|---|---|---|
level |
jingdata_industry_chain_particulars |
链内层级 | 1 产业链 / 2 主层 / 3 子层 / 4 末级 |
jingdata_industry_chain、…_analysis、…_market_applies |
地理粒度 | 1 国家 / 2 省 / 3 市 / 4 区县 | |
type |
jingdata_industry_chain_market_applies |
时间窗口 | 1 近一月 / 2 近三月 / 3 近一年 / 4 近三年 |
jingdata_investment、jingdata_large_transaction 的 investor.type |
主体类型编码 | 编码值,暂未开放字典 | |
record_type |
jingdata_industry_chain_analysis |
指标类型 | 1 市值 / 2 总营收 / 3 总利润 |
jingdata_org |
机构类型 | 1 VC/PE / 2 企业风险投资 / 3 市场化母基金 / 4 政府引导基金 / 5 其他类型 | |
code |
jingdata_industry_chain_evolution_analysis |
序列类型 | 1 沪深300 / 2 行业个股(两条序列不要混读) |
status |
多个索引 | 记录状态 | 通常 1=有效 / 0=无效,各索引语义略有差异 |
address1~address4 |
多个索引 | 行政区划 | 依次为国家 / 省 / 市 / 区县编码(GB/T 2260) |
三套并行的分类体系,不可混用
平台里存在三套彼此独立的分类,最容易被当成一回事:
| 体系 | 入口字段 | 用途与取值形态 |
|---|---|---|
| 一级行业 | industry_v2.id |
粗粒度行业筛选。共 21 个数字码,见 一级行业编码。 |
| 业务标签 | tags_v2.id |
细分领域 / 概念筛选。取值形如 tag-dccb0a7af2,需先用行业标签维表查出 id。 |
| 产业链节点 | searchCompaniesByChainNode |
产业链归属筛选,底层字段为 related_node_ids。节点 ID 全局唯一,取值形如 80 或 chain-19b20d6a969kbxd;
查询请走专用工具,不要手写 DSL。 |
「人工智能」只是业务标签,不是一级行业 —— 用 industry_v2 查它会得到 0 条。
而产业链节点里的「人工智能产业链」又是第三套体系,与标签 id 并不通用。
11使用限制
| 限制项 | 说明 |
|---|---|
| 单页最多 10 条 | size 上限为 10。超过会直接报错:size=11 超过该服务单页最大限制10,请将size设置为不超过10后分页查询该服务。批量获取数据请使用 from 分页。 |
| 不支持聚合 | 不接受 aggs / aggregations。分组统计、求和、去重计数等请在调用方完成。 |
| 禁止的查询结构 | 下列键名一旦出现在查询中会被直接拒绝,返回 禁止的查询结构: <键名> (位置 $.<路径>)。
它们会绕过过滤、泄露内部结构或消耗大量资源:
① global(忽略 query 条件直接扫描全索引);
② script / script_fields / runtime_mappings / script_query(可执行脚本逻辑);
③ percolate / terms_enum(枚举字段全部取值);
④ scroll / search_after / pit(深翻页三件套,一律不可用);
⑤ profile / explain(暴露索引内部结构)。
带来的约束:需要翻深页时不能借助深翻页机制,只能使用 from + size 常规分页。 |
| 已删除数据自动过滤 | 服务端会自动注入 is_deleted = false 条件,返回结果不包含已删除记录,调用方无需自行处理该字段。 |
| 分页需稳定排序 | 排序字段存在大量重复值时,需追加唯一字段(如 _id)作为次级排序,否则翻页会出现重复或遗漏。 |
| 响应可能被分片 | 结果较大时,MCP 响应会被拆分为多个 content 片段。拼接文本时必须直接相连(如 "".join(...)),使用换行符拼接会破坏 JSON 结构导致解析失败。 |
| 字段以实际查询为准 | 各索引的字段结构可能随数据版本调整。文中列出的字段可供参考,未列出的字段也可能可用,请以实际查询结果为准。 |
| 排序字段因索引而异 | 多数索引可用 _id 作为排序 tiebreaker;企业索引 jingdata_company 必须使用 id,用 _id 排序会返回空结果。 |
使用 https |
服务仅支持加密传输,使用 http 会收到永久跳转,部分客户端不跟随跳转会导致连接失败。 |
批量拉取数据建议
- 先用
track_total_hits: true拿到总量,据此计算需要翻多少页。 - 按
from = 0, 10, 20, ...依次翻页,每次size = 10。 - 排序始终带上
_id作为次级排序,并在本地按_id去重。 - 控制请求频率,避免对服务造成压力。
12错误码与常见报错
| 返回值 | 含义 | 处理方式 |
|---|---|---|
HTTP 401{"code": -32001} |
认证失败 | 检查 Authorization: Bearer <TOKEN> 请求头是否正确携带、令牌是否有效。 |
{"code": 300005, "msg": "无权限访问此api"} |
该索引未向你的账号开放 | 索引名正确但未获得访问权限。请以 getIndexes 返回的可用清单为准,或联系鲸准确认账号权限范围。 |
{"code": 300010, "msg": "URL不存在"} |
索引不存在或不可查询 | 通过 getIndexes 确认索引名拼写是否正确;本服务当前开放 17 个可查询索引(含产业链专题索引)。 |
size=... 超过该服务单页最大限制10 |
分页超限 | 将 size 调整为不大于 10,改用 from 分页。 |
聚合功能已被禁用... |
使用了聚合 | 移除 aggs / aggregations 参数,改为在调用方统计。 |
禁止的查询结构: xxx (位置 $.xxx) |
查询中使用了被禁用的键名 | 移除该键后重试。global / script / script_fields / runtime_mappings /
scroll / search_after / pit / profile / explain 等均在禁用之列,完整清单见
使用限制。 |
400 Bad Request |
请求格式错误 | 常见原因:对 /sse 使用了 GET;或对非 nested 字段使用了 nested 查询(如 industry_v2 不是 nested 类型)。 |
Unexpected value: xxx |
字典名不存在 | getDictsByName 仅支持字段结构中标注的字典名,当前为 focus_phase 与 country。 |
13数据时效与文档版本
13.1 数据更新
鲸准数据持续更新,各索引的数据量会随时间增长。取数时建议:
- 用
track_total_hits: true读取hits.total,获取实时总量; - 多数索引的记录带
last_modified_at字段,可据此判断记录的最后更新时间; - 交易类数据可用
finance_date、估值序列可用trade_date判断数据的最新日期。
本文不承诺具体的数据截止日期。如需在交付物中标注截止时间,请以实际查询结果中最新记录的
last_modified_at(或交易索引的 finance_date)为准;涉及对外的交付口径,建议与鲸准确认后再引用。
数据量随时间增长,同一条件在不同时间查询可能得到不同结果。用于报表或分析时,建议在业务侧记录 查询条件、取值时间与结果总量,便于复现与对账。
13.2 文档版本
| 项目 | 内容 |
|---|---|
| 文档版本 | v1.3 |
| 最后更新 | 2026-09-29 |
| 对应服务 | 鲸准 MCP Server |
| 索引数量 | 17 个(含 5 个产业链专题索引) |
13.3 修订记录
| 版本 | 日期 | 变更内容 |
|---|---|---|
v1.3 | 2026-09-29 | 新增 searchCompaniesByChainNode 与 getCompanyChainLayer 两个产业链专用工具,工具总数由 4 增至 6;
产业链章节改为直接调用专用工具,移除自行拼装 DSL 的查询方式;按地区筛选升级为省 / 市 / 县任意层级。 |
v1.2 | 2026-09-18 | 新增「我要查什么 → 用哪个索引」场景选型表、已知陷阱速查、同名不同义速查、数据时效与文档版本; 补充分页取数完整函数、字段筛选方式与编码字典;统一全文索引数量口径。 |
v1.1 | 2026-09-18 | 新增 5 个产业链专题索引与「如何查询产业链节点下的企业」;索引总数由 14 增至 19; 数据规模改用长期稳定的量级表述。 |
v1.0 | 2026-09-17 | 首次发布:接入方式、4 个工具、14 个数据索引与字段结构、查询示例、使用限制与错误码。 |
14常见问题
查询返回 0 条,是数据没有吗?
先检查三点:一是字段名是否与 getMapping 一致;二是条件值是否需要是字符串(如 industry_v2.id);三是筛选的细分行业是否属于一级行业 —— 「人工智能」等细分领域不在 industry_v2 里,必须走 tags_v2。
为什么按行业名称 match 查不到数据?
industry_v2 只包含 21 个一级行业,传入不存在的行业名称(如「人工智能」)会返回 0。若使用 industry_v2.name 做匹配,该字段支持分词检索,但仅在一级行业名称范围内有效。
怎么统计某个行业有多少项目?
服务不支持聚合,需要自行统计:可以对 21 个一级行业编码分别发起一次查询并读取 hits.total;标签维度则可直接在行业标签维表(jingdata_industry_v2)中读取 project_num 字段。
融资轮次字段为什么是数字?
轮次以编码形式存储。调用 getDictsByName 传入 focus_phase 获取编码与名称的映射表,再在展示层还原为中文。
一次最多能拿多少条数据?
单次请求最多 10 条。需要更多数据请用 from 分页循环拉取,并注意排序稳定性与去重。
数据更新频率如何?
数据规模随鲸准数据持续更新,建议在业务侧记录查询快照,并对关键指标标注数据截止时间。