返回首页

KNN 预过滤:使用 ACORN-1 的 Manticore Search

Manticore Search 中的初步 KNN 过滤优化了带有属性过滤器的查询的 HNSW。ACORN-1 减少距离计算,对于小结果集自动 fullscan。详细的 SQL 和 JSON 示例。

Manticore 中的 ACORN-1:如何使用过滤器加速 KNN
Advertisement 728x90

Manticore Search 中 KNN 预过滤:ACORN-1 优化 HNSW

Manticore Search 19.0.1+ 版本中的 KNN 预过滤功能,将属性过滤器直接集成到 HNSW 图遍历过程中。这消除了后过滤的低效问题,后过滤需要先扫描整个数据集,再应用过滤条件。在一个包含 1000 万商品的产品目录中,使用 '电子产品' 类别过滤(仅占 5% 文档),后过滤可能返回少于请求的 k 个结果,浪费资源处理无关节点。

预过滤在候选探索过程中检查条件,确保精确返回 k 个匹配文档的结果。

后过滤的问题与转向预过滤

在后过滤中,HNSW 忽略过滤条件:算法先找到全局 k 个最近邻向量,然后丢弃不匹配项。对于严格过滤(如 category='电子产品' AND price<500),图遍历会探索大量无关区域,导致召回率下降和延迟增加。

Google AdInline article slot

带自动预过滤的示例 SQL 查询:

SELECT id, title, knn_dist()
FROM products
WHERE knn(embedding, (0.12, 0.45, 0.78, 0.33))
  AND category = '电子产品'
  AND price < 500
LIMIT 10;

JSON 等价形式:

{
    "table": "products",
    "knn": {
        "field": "embedding",
        "query": [0.12, 0.45, 0.78, 0.33]
    },
    "query": {
        "bool": {
            "must": [
                { "equals": { "category": "电子产品" } },
                { "range": { "price": { "lt": 500 } } }
            ]
        }
    },
    "limit": 10
}

类别和价格过滤会在 HNSW 遍历过程中检查。

Google AdInline article slot

朴素预过滤:原理与局限

朴素方法按常规遍历 HNSW,但仅将通过过滤的节点加入优先队列。不匹配节点仍用于导航以保持图连通性。

局限:无论过滤与否,都会计算所有邻居距离。在 5% 选择性下,95% 的计算(最耗时操作)被浪费。

Manticore 中的 ACORN-1:高级优化

Manticore 为选择性过滤器(<60% 文档)实现 ACORN-1:

Google AdInline article slot
  • 距离计算前过滤:邻居在计算距离前先过滤。不匹配项直接跳过,无需评估。
  • 自适应扩展:从不匹配节点出发,算法探索其邻居(最多 3–4 层),专注寻找合适候选。

在低选择性下,这可减少 95% 距离计算,提升搜索速度而不损失质量。

高选择性时,ACORN-1 自动激活。

自动执行策略选择

Manticore 规划器使用属性直方图评估选择性:

  • 标准 HNSW:>60% 文档通过过滤 — 朴素预过滤。
  • ACORN-1:1–60% — 优化遍历。
  • 全扫描:<1%(如 1000 万中 50 个)— 直接扫描过滤文档,绕过 HNSW。

它比较预期 HNSW 访问节点数与过滤子集大小。

管理过滤模式

后过滤(prefilter=0"prefilter": false):

SELECT id, knn_dist()
FROM products
WHERE knn(embedding, (0.12, 0.45, 0.78, 0.33), { prefilter=0 })
  AND category = '电子产品'
LIMIT 10;

全扫描(fullscan=1"fullscan": true):

SELECT id, knn_dist()
FROM products
WHERE knn(embedding, (0.12, 0.45, 0.78, 0.33), { fullscan=1 })
  AND category = '电子产品'
LIMIT 10;

后过滤适合需要全局最近邻或 >95% 文档通过的情况。全扫描适用于极小过滤集。

| 模式 | 选择性 | 优势 | 劣势 |

|------|--------|------|------|

| 后过滤 | 高 (>95%) | 简单、可预测 | 结果少于 k 个 |

| 预过滤 (朴素) | 中等 (60–95%) | 可靠 k 个结果 | 开销 |

| ACORN-1 | 低 (1–60%) | 计算节省 | 实现复杂 |

| 全扫描 | 极低 (<1%) | 精确召回 | 线性复杂度 |

关键要点

  • KNN+属性默认使用预过滤,保证 k 个结果。
  • ACORN-1 在 <60% 选择性下节省高达 95% 距离计算。
  • 超选择性过滤自动全扫描。
  • 后过滤用于全局排序或调试。
  • 规划器基于直方图按查询/段自适应。

— Editorial Team

Advertisement 728x90

继续阅读