自动化与脚本
为应用集成 Mapbox 交互式搜索:从需求发现…
当需要在 Web、iOS、Android 或 Node.js 应用中为用户提供地址、POI 或自动补全搜索时,按此流程选型并实现 Mapbox 搜索。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
为应用集成 Mapbox 交互式搜索:从特定
解决思路
- 先确认本技能与 `mapbox-search-patterns` 的边界:本技能负责完整实现工作流,`mapbox-search-patterns` 负责工具与参数选择。
- 进入编码前先做需求发现:询问「用户想搜索什么?」
- 根据搜索内容选型:地址、交互式地址搜索或 geocoding 默认用 Search Box API;只有批处理、服务端 geocoding 或维护旧集成才用 Geocoding API。
- 若用户搜 POI 或商户,使用 Search Box API 的类别搜索。
- 若用户同时搜地址和 POI,使用 Search Box API。
- 若用户搜特定类型 POI,例如餐厅、酒店等,使用 Search Box API。
- 若用户搜国家、城市、邮编或社区:交互式搜索用 Search Box API,批处理或服务端 geocoding 才用 Geocoding API。
- 若用户搜自定义地点,即用户创建的地点,可能需要自定义数据加搜索集成。
- 若用户未说明是否搜 POI,追问:「用户是否搜索 points of interest 数据?餐厅、商店、商户类别?」
- 若回答包含 POI,使用 Search Box API。
- 若回答不包含 POI,交互或自动补全场景仍默认 Search Box API;只有批处理、服务端永久 geocoding、维护已有 Geocoding API 集成时才推荐 Geocoding API。
- 询问「用户会在哪里搜索?」
- 若只搜单个国家,使用 `country` 参数以提升结果质量并降低成本。
- 若搜特定区域,使用 `bbox` 参数做边界框限制。
- 若搜全球,不加国家限制,但可能需要 `language` 参数。
- 若搜多个特定国家,使用 `country` 数组参数。
- 追问「是否需要将结果限制到特定区域?」例如配送范围、服务区域等。
- 询问「用户如何与搜索交互?」
- 若为边输边搜或自动补全,使用 Search Box API,设置 `auto_complete: true`,启用基于会话的计费,并实现防抖。
- 若为搜索按钮或最终查询,可用任一 API,不需要自动补全。
- 若两者都要,做两阶段搜索:先自动补全,再获取详细结果。
- 若为语音输入,考虑语音转文字集成,并处理更长查询。
- 询问「目标平台是什么?」
- Web 应用:使用 Mapbox Search JS,最简单;高级场景可直接调 API。
- iOS 应用:使用 Search SDK for iOS,推荐;高级场景可直接 API 集成。
- Android 应用:使用 Search SDK for Android,推荐;高级场景可直接 API 集成。
- 多平台:使用平台特定 SDK,推荐;或为一致性采用直接 API 方案。
- React 应用:使用 Mapbox Search JS React,带 UI 最简单;自定义 UI 用 Search JS Core;避免直接调 API,因为需手动处理防抖、session token 管理和竞态条件。
- Vue、Angular 或其他框架:使用 Mapbox Search JS Core 或 Web;若直接调 API,必须正确使用 session token,每个搜索会话一个 token,并在每个 suggest 或 retrieve 请求传 `session_token`。
- 询问「用户选择结果后要做什么?」
- 若结果用于地图飞到位置,需坐标并集成地图。
- 若结果用于显示详情或信息,需 retrieve 并展示结果属性。
- 若结果用于填充表单字段,需解析地址组件。
- 若结果用于开始导航,需坐标并集成 directions。
- 若结果用于多选,需处理选择状态,可能显示标记。
- 询问「预计每月搜索量?」
- 低量,少于 10k:免费层足够,简单实现。
- 中量,10k 到 100k:考虑缓存,优化 API 调用。
- 高量,超过 100k:实现防抖、缓存、批处理,并监控成本。
- 根据发现答案走产品选择决策树;关键原则:Search Box API 是几乎所有交互式搜索用例的默认选择,包括地址搜索、geocoding、自动补全、POI 搜索;其基于会话的计费对交互或自动补全更省成本。
- 在满足任一条件时使用 Search Box API:需要交互式地址搜索或自动补全;需要 POI 或类别搜索;需要任何面向终端用户的搜索 UI;希望使用基于会话的计费;正在构建含搜索栏的 web、iOS 或 Android 应用。
- Web 集成优先用 SDK 而非直接 API:Mapbox Search JS 推荐,包含 Search JS React,即 React 库加 UI;Search JS Web,即 Web Components 加 UI;Search JS Core,即 node 或 web 的 JS wrapper,自建 UI。
- Search Box API,即 REST,用于高级或自定义直接 API 集成。
- iOS 原生集成使用 Search SDK for iOS;Android 原生集成使用 Search SDK for Android。
- 仅在以下情况使用 Geocoding API:批处理大量地址,服务端;永久或存储 geocoding 结果,服务端且结果持久化;维护已有 Geocoding API 集成且迁移不划算;不需要交互或面向用户的搜索。
- 不要在这些情况推荐 Geocoding API:用户要搜索栏、自动补全或交互式地址查询;用户说 geocoding 但描述的是交互式搜索流;应改用 Search Box API。
- 根据平台和需求加载参考文件:Web,Search JS React、Web、Core 或直接 API,加载 `references/web-search-js.md`,适用于构建 web 应用,包括 vanilla JS 或除 React 特定模式外的任何框架。
- React 集成加载 `references/react-search.md`,适用于构建 React 应用。
- iOS 加载 `references/ios-search.md`,适用于构建 iOS 应用,Swift、UIKit、SwiftUI。
- Android 加载 `references/android-search.md`,适用于构建 Android 应用,Kotlin、Java。
- Node.js 加载 `references/nodejs-search.md`,适用于需要服务端搜索,Express、serverless、backend API。
- 最佳实践加载 `references/best-practices.md`,适用于首次实现搜索或优化已有实现;涵盖防抖、session tokens、地理过滤、错误处理、无障碍、缓存、token 安全。
- 常见陷阱加载 `references/pitfalls.md`,适用于调试、review 代码或 code review;涵盖无防抖、缺少 session tokens、无 geo context、差 mobile UX、竞态条件。
- 框架 Hook 加载 `references/framework-hooks.md`,适用于围绕 Search JS Core 构建自定义 hooks,React,或 composables,Vue。
- 测试与监控加载 `references/testing-monitoring.md`,适用于编写测试或设置生产监控和分析。
- 启动前验证配置:token 正确限定作用域,仅 `search:read`。
- 启动前验证配置:配置 URL restrictions。
- 启动前验证配置:设置地理过滤,`country`、`proximity` 或 `bbox`。
- 启动前验证配置:根据用例设置 `types` 参数。
- 启动前验证配置:如需要设置 `language` 参数。
- 验证实现:实现防抖,推荐 300ms。
- 验证实现:正确使用 session tokens。
- 验证实现:为所有失败情况实现错误处理。
- 验证实现:显示 loading states。
- 验证实现:优雅处理空结果。
- 验证实现:防止竞态条件。
- 验证 UX:触摸目标至少 44pt 或 48dp。
- 验证 UX:结果展示足够上下文,name 加 address。
- 验证 UX:键盘导航可用。
- 验证 UX:设置 accessibility 属性。
- 验证 UX:正确处理 mobile 键盘。
- 验证性能:高量时实现缓存。
- 验证性能:设置请求超时。
- 验证性能:获取最少数据。
- 验证性能:优化 bundle size。
- 验证测试:为核心逻辑写单元测试。
- 验证测试:用真实 API 做集成测试。
- 验证测试:在慢网络上测试。
- 验证测试:用各种查询类型测试。
- 验证测试:做移动设备测试。
- 验证监控:设置 analytics tracking。
- 验证监控:配置 error logging。
- 验证监控:建立 usage monitoring。
- 验证监控:配置 budget alerts。
- 与其他技能集成:`mapbox-search-patterns` 用于参数选择与优化。
- 与其他技能集成:`mapbox-web-integration-patterns` 用于框架特定模式。
- 与其他技能集成:`mapbox-token-security` 用于 token 管理与安全。
- 与其他技能集成:`mapbox-web-performance-patterns` 用于优化搜索性能。
- 查阅资源:Search Box API Documentation,https://docs.mapbox.com/api/search/search-box/。
- 查阅资源:Geocoding API Documentation,https://docs.mapbox.com/api/search/geocoding/。
- 查阅资源:Mapbox Search JS,https://docs.mapbox.com/mapbox-search-js/guides/,含 Search JS React、Search JS Web、Search JS Core 文档。
- 查阅资源:Search SDK for iOS 指南,https://docs.mapbox.com/ios/search/guides/。
- 查阅资源:Search SDK for Android 指南,https://docs.mapbox.com/android/search/guides/。
- 使用 Location Helper Tool,https://labs.mapbox.com/location-helper/,计算 bounding boxes。
- 当用户说「I need location search」时,执行发现问题,即上面 Questions 1-6。
- 推荐产品:Search Box API 作为所有交互或面向用户搜索的默认,包括地址 geocoding;Geocoding API 仅用于 batch、服务端或永久 geocoding;优先平台 SDK,web 用 Search JS,mobile 用 native SDKs。
- 实现时加入:Debouncing、Session tokens、Geographic filtering、Error handling、Good UX。
- 彻底测试。
- 在生产环境监控。
- 记住:最佳搜索实现先问对问题,再精确构建用户所需,不多不少。
适用边界 · 注意事项
- 项目没有 Mapbox 账号或 API token,或不能使用 Mapbox 云服务时。
- 只需要非交互式、批量的服务端 geocoding,且已有其他方案时,重点查 Geocoding API,而非交互集成工作流。
- 需求只是地图展示、路线规划等不涉及搜索或 geocoding 时。