返回博客
Palantir企业搜索OntologyElasticsearch分面搜索数据平台权限管理搜索引擎

Palantir 搜索与发现深度解析:在百万对象中找到你要的那个

深入分析 Palantir Foundry 的 Ontology 感知搜索系统,权限感知搜索、分面搜索、模糊匹配等核心能力,以及 AIP 的开源实现。

Coomia 团队发布于 2025年5月11日12 分钟阅读
分享本文Twitter / X

#TL;DR

  • Foundry 的搜索不是传统的"关键词搜表" -- 它搜索的是 Ontology 对象,理解对象类型、属性、关系和权限,让用户像使用 Google 一样在企业数据中搜索,但结果是结构化的业务对象。
  • 权限感知搜索是 Foundry 的核心差异化能力 -- 你永远只能搜索到你有权限看到的对象,搜索结果自动过滤,不会泄露任何你不应该看到的数据,这对政府和金融客户至关重要。
  • Coomia DIP 实现了 6 种搜索模式(BEST_MATCH/PREFIX/FUZZY/EXACT/WILDCARD/REGEX)+ 3 种分面搜索(TERMS/RANGE/DATE_RANGE)+ 基于 Redis 的热词/近期搜索自动建议,在开源生态中构建 Ontology 感知的搜索体验。

#1. 为什么企业搜索如此困难?

#1.1 消费者搜索 vs 企业搜索

我们每天都在使用 Google、百度搜索互联网内容,体验流畅自然。但当你在企业内部搜索数据时,体验往往是灾难性的。

Code
消费者搜索 vs 企业搜索
================================================

Google 搜索:
  输入: "北京天气"
  结果: 即时显示天气卡片, 温度、湿度、预报
  体验: 极好

企业传统搜索:
  输入: "客户张三的订单"
  结果: ???

  场景 1 (没有搜索):
    "请联系 IT 部门提工单,工单处理时间 3-5 个工作日"

  场景 2 (有基本搜索):
    返回 47 个结果:
    - CRM 中的客户记录 (3 条)
    - ERP 中的订单数据 (12 条)
    - 邮件中提到"张三"的邮件 (28 条)
    - 某个 Excel 文件 (4 个)

    问题: 哪些是同一个"张三"?
    问题: 我有权限看这些数据吗?
    问题: 哪些信息是最新的?

  Foundry 搜索:
    返回结构化结果:
    ┌─────────────────────────────────────┐
    │ Customer: 张三                       │
    │ ID: CUST-2024-78901                 │
    │ 状态: 活跃                           │
    │ 关联订单: 12 个                      │
    │ 最新订单: ORD-2024-56789 (进行中)    │
    │ 客户经理: 李四                       │
    │ [查看详情] [查看关联] [查看历史]      │
    └─────────────────────────────────────┘
    体验: 很好

#1.2 企业搜索的三大难题

Code
企业搜索三大难题
================================================

难题 1: 数据分散
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ CRM  │ │ ERP  │ │ HRM  │ │ 邮件 │ │ 文件 │
└──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘
   │        │        │        │        │
   ▼        ▼        ▼        ▼        ▼
 同一个"客户"在 5 个系统中有 5 种不同的表示
 ID 不同, 字段不同, 更新时间不同

难题 2: 权限复杂
┌──────────────────────────────────────────┐
│  用户 A (销售): 能看客户联系方式          │
│  用户 B (财务): 能看客户账务信息          │
│  用户 C (合规): 能看客户风险评分          │
│  用户 D (实习): 只能看客户名称            │
│                                          │
│  同一个搜索请求, 4 个人看到不同的结果     │
└──────────────────────────────────────────┘

难题 3: 语义理解
┌──────────────────────────────────────────┐
│  搜索 "大客户":                           │
│  - 指的是订单金额大的客户?               │
│  - 指的是公司规模大的客户?               │
│  - 指的是"大客户部"名下的客户?           │
│  - 指的是客户等级为"大客户"的?           │
│                                          │
│  没有 Ontology = 无法消除歧义             │
│  有 Ontology = 精确理解语义               │
└──────────────────────────────────────────┘

#2. Foundry 的 Ontology 感知搜索

#2.1 搜索的是对象,不是表

这是 Foundry 搜索与传统数据库搜索的根本区别:

Code
传统搜索 vs Ontology 搜索
================================================

传统数据库搜索:
  SELECT * FROM customers WHERE name LIKE '%张三%'
  UNION
  SELECT * FROM orders WHERE customer_name LIKE '%张三%'
  UNION
  SELECT * FROM tickets WHERE description LIKE '%张三%'

  问题: 跨表搜索需要知道表结构
  问题: 结果是"行",不是"对象"
  问题: 无法理解对象之间的关系

Foundry Ontology 搜索:
  Search("张三", types=[Customer, Order, Ticket])

  引擎理解:
  - Customer 是一个对象类型, 有 name, email, phone 等属性
  - Order 与 Customer 有 "placed_by" 关系
  - Ticket 与 Customer 有 "reported_by" 关系

  返回:
  ┌─ Customer 对象 ────────────────────────┐
  │ 张三 (CUST-78901)                      │
  │ ├─ placed_by → [12 个订单]              │
  │ ├─ reported_by → [3 个工单]             │
  │ └─ managed_by → 李四 (员工)             │
  └────────────────────────────────────────┘

#3. 六种搜索模式

Code
6 种搜索模式
================================================

1. BEST_MATCH(最佳匹配, 综合评分)
   查询: "supply chain risk"
   结果按相关性排序, 综合 TF-IDF / BM25

2. PREFIX(前缀匹配)
   查询: "ORD-2024"
   匹配: ORD-2024-56789, ORD-2024-00001
   适用: 自动补全 / type-ahead

3. FUZZY(模糊匹配, 容忍拼写错误)
   查询: "Shnaghai" (拼写错误)
   匹配: "Shanghai" (编辑距离 = 2)

4. EXACT(精确匹配)
   查询: "ORD-2024-56789"
   精确字符串匹配, 不做分析

5. WILDCARD(通配符匹配)
   查询: "ORD-*-VIP"
   * 匹配零或多个字符

6. REGEX(正则表达式匹配)
   查询: "ORD-202[34]-\\d{5}"
   完整正则表达式匹配
Code
分面搜索示意
================================================

搜索: 所有 Order 对象

分面面板:                        搜索结果:
┌────────────────────────┐       ┌──────────────────────┐
│ 状态 (Ontology 枚举)    │       │ ORD-2024-001         │
│  ☐ pending     (3421)  │       │ 客户: 某某公司        │
│  ☑ processing  (5612)  │       │ 金额: $45,000        │
│  ☐ shipped     (4201)  │       │ 状态: 进行中          │
│  ☐ delivered   (2000)  │       ├──────────────────────┤
│                        │       │ ORD-2024-002         │
│ 金额范围               │       │ ...                  │
│  ☐ < $1K       (2345)  │       └──────────────────────┘
│  ☑ $1K-$50K    (8901)  │
│  ☐ $50K-$1M    (3456)  │       显示 5612 条结果
│  ☐ > $1M       (532)   │       (过滤: processing, $1K-$50K)
│                        │
│ 创建日期               │       分面来自 Ontology 定义:
│  ☐ 最近 7 天   (1234)  │       - 枚举值 = TERMS 分面
│  ☑ 最近 30 天  (5678)  │       - 数值 = RANGE 分面
│  ☐ 最近 90 天  (12345) │       - 日期 = DATE_RANGE 分面
└────────────────────────┘

#5. 权限感知搜索

#5.1 你只能找到你能看到的

这是 Foundry 搜索最重要的安全特性:

Code
权限感知搜索
================================================

数据库中实际存在的对象:
  Customer: [张三, 李四, 王五, 赵六, 刘七]
  Order: [ORD-001, ORD-002, ORD-003, ..., ORD-100]

用户 A (华东区销售经理):
  权限: 华东区客户 + 自己的订单
  搜索 "客户" → 结果: [张三, 李四]  (2/5 客户)

用户 B (全国销售总监):
  权限: 所有区域客户 + 所有订单
  搜索 "客户" → 结果: [张三, 李四, 王五, 赵六, 刘七]

用户 C (合规审计):
  权限: 所有客户 (只看合规字段) + 高风险订单
  搜索 "客户" → 结果: [张三, 李四, 王五, 赵六, 刘七]
    但每个客户只显示: 名称, 风险等级, 合规状态
    不显示: 联系方式, 交易记录

关键点:
  - 搜索结果的数量不同 (行级权限)
  - 搜索结果的字段不同 (列级权限)
  - 分面统计数字也会相应调整
  - 永远不会泄露"你无权看到的数据"

这种深度权限集成在 Palantir 的闭源平台中实现得很好,但企业必须接受完全的平台锁定。Coomia DIP 同样实现了与 Ontology 深度集成的权限感知搜索,但完全基于开源技术栈,企业可以自主掌控。

#6. 搜索建议与自动补全

Code
搜索建议系统
================================================

用户输入: "sup"

搜索建议 (实时, <100ms):
┌──────────────────────────────────────────┐
│  供应链 Supply Chain (对象类型, 12,345 个) │
│  Superior Industries (公司, 客户)          │
│  Super Admin (角色)                       │
│  Supply Order #SO-2024-789 (最近访问)      │
│  "supply chain disruption" (热门搜索)      │
│  ──────────────────────────────────────── │
│  最近搜索:                                │
│  "supply chain risk assessment"           │
│  "supplier evaluation"                    │
└──────────────────────────────────────────┘

建议来源:
  1. 对象类型名称匹配 (Ontology Schema)
  2. 具体对象名称匹配 (实时索引)
  3. 用户最近访问的对象 (个性化)
  4. 热门搜索词 (全局统计)
  5. 保存的搜索 (用户自定义)

#7. 与主流搜索工具对比

维度Foundry SearchElasticsearchAlgoliaApache Solr
搜索对象Ontology 对象文档文档/记录文档
Ontology 感知原生
权限集成深度集成需要自建有限需要自建
分面搜索Ontology 驱动手动配置自动手动配置
搜索建议内置 + 个性化需要自建内置需要自建
关系搜索原生 (图遍历)不支持不支持不支持
开源

#8. AIP 的搜索实现

#8.1 SearchService 架构

Code
AIP SearchService
================================================

┌────────────────────────────────────────────────┐
│  SearchService (gRPC)                          │
│                                                │
│  核心搜索 RPC:                                  │
│  ┌──────────────────────────────────────────┐   │
│  │  1. Search(SearchRequest)                │   │
│  │     → 支持 6 种搜索模式                   │   │
│  │     → 支持分面搜索                        │   │
│  │     → 支持分页和排序                      │   │
│  │                                          │   │
│  │  2. Suggest(SuggestRequest)              │   │
│  │     → 自动补全建议                        │   │
│  │     → 热门搜索                            │   │
│  │     → 最近搜索                            │   │
│  │                                          │   │
│  │  3. FacetSearch(FacetRequest)            │   │
│  │     → TERMS 分面                          │   │
│  │     → RANGE 分面                          │   │
│  │     → DATE_RANGE 分面                     │   │
│  └──────────────────────────────────────────┘   │
│                                                │
│  底层引擎:                                      │
│  ┌────────────┐  ┌──────────┐  ┌────────────┐  │
│  │Elasticsearch│  │  Redis   │  │ Ontology   │  │
│  │(全文索引)   │  │(建议缓存)│  │(类型感知)   │  │
│  └────────────┘  └──────────┘  └────────────┘  │
└────────────────────────────────────────────────┘

#9. 搜索性能优化

Code
搜索索引优化策略
================================================

策略 1: 多级索引
┌────────────────────────────────────────────┐
│  Level 1: 内存缓存 (Redis)                 │
│  - 热门搜索结果缓存                         │
│  - TTL: 5 分钟                              │
│  - 命中率: ~60%                             │
│  - 响应时间: <5ms                           │
├────────────────────────────────────────────┤
│  Level 2: Elasticsearch                    │
│  - 全文索引 + 结构化索引                     │
│  - 近实时更新 (refresh_interval: 1s)        │
│  - 响应时间: 10-100ms                       │
├────────────────────────────────────────────┤
│  Level 3: 数据库 (PostgreSQL)              │
│  - 精确查询回退                             │
│  - 复杂关联查询                             │
│  - 响应时间: 50-500ms                       │
└────────────────────────────────────────────┘

#Key Takeaways

  1. Foundry 的搜索革命性地将"搜表"变成了"搜对象" -- 通过 Ontology 感知,搜索引擎理解业务对象的类型、属性和关系,返回的不是数据库行,而是有结构、有上下文的业务对象,配合权限过滤确保数据安全。

  2. 权限感知搜索不是"事后过滤"而是"内建安全" -- 从搜索查询构建阶段就注入权限约束,确保用户永远只能发现自己有权访问的数据,这对政府和金融行业的合规要求至关重要。

  3. AIP 通过 6 种搜索模式 + 3 种分面类型 + Redis 热词/近期搜索构建了完整的 Ontology 感知搜索体验 -- 底层基于 Elasticsearch 保证搜索性能,上层通过 Ontology 类型系统提供语义理解,Redis 提供实时的个性化搜索建议。

#想要 Palantir 级别的能力?试试 AIP

Palantir 的技术理念令人赞叹,但其高昂的价格和封闭的生态让大多数企业望而却步。Coomia DIP 基于相同的 Ontology 驱动理念,提供开源、透明、可私有化部署的数据智能平台。

  • AI 管线构建器:用自然语言描述,自动生成生产级数据管线
  • 业务本体:像 Palantir 一样建模你的业务世界,但完全开放
  • 决策智能:内置规则引擎和假设分析,数据驱动每一个决策
  • 开放架构:基于 Flink、Doris、Kafka 等开源技术栈,零锁定

👉 立即免费试用 Coomia DIP | 查看产品文档

相关文章