让对话调研与 ⌘K 搜索能查到所有 A 股 / 港股 / 美股——名单外的「没有的」也能模糊搜。混合方案、实时为主 + 日缓存,守住「事实来自数据源、不编、歧义不硬猜」的铁律。
investresearch_data/resolve.py 的 NAME_TO_UID(cn_names 反查 + 精选 A 股 + 别名),前端 web/app.html 的 NAME_UID_SEED。HK:01675)查不到 → 对话调研诚实降级、要求用代码。| 市场 | 中文名 | 英文/拼音/代码 | 可达源 |
|---|---|---|---|
| A 股 | ✅ 全量 | ✅ | baostock query_all_stock 全部代码 + 中文名(code_name) |
| 港股 / 美股 | ⚠️ 仅精选 | ✅ 全量 | Yahoo Finance 搜索端点(认英文/拼音/代码,不认中文);中文名无海外可达全量免费源 |
Yahoo 实测 ?q=asiainfo → 1675.HK / 600519.SS / NVDA,带交易所 + quoteType,可映射 uid。结论:A 股中文名可全量模糊搜;港/美股英文·拼音·代码可全量搜 + 精选中文名;任意港/美股中文名不保证,代码兜底。
search.py:search_symbols(query) → [{uid,name,market}]。先查本地精选表(秒回)→ 中文走 A 股名索引 + 精选 cn_names → 拉丁/数字走 Yahoo(EQUITY 过滤、symbol→uid)。best-effort,失败回落本地不抛;依赖注入可离线测。{code_name→uid},baostock query_all_stock 拉一次(复用 baostock provider 登录/前缀映射)。GET /search?q=&limit=:仿只读端点,进 KNOWN_PATHS。/ask 兜底:实体 resolve_company 未命中 → search_symbols。一条高置信→用之(明示选中名+uid);歧义/空→留 unresolved、列候选。onSearchInput:backendOn 时防抖调 /search,与本地 DB.searchIndex 合并去重进下拉;点选→openCompanyByUid(uid,name)。本地即时先出、Yahoo 异步补。/ask,后端加兜底后「没有的也能搜」自动生效;displayName/currentCompany(v0.39.2)已能用后端名。/ask 做意图路由。http_get / ashare_names 依赖注入,桩 Yahoo JSON + 假 A 股名表全离线。pytest -q:test_search(uid 映射 / 中文命中 / Yahoo 解析 / 网络失败回落)+ test_ask(搜索兜底 / 歧义列候选)+ 全量绿。GET /search?q=asiainfo → 含 HK:01675;?q=宁德 → SZ:300750。HK:01675。curl "…/search?q=asiainfo";/ask 问「平安银行怎么样」→ baostock 搜到 SZ:000001。