前言

  • 本文对 Elasticsearch 8.19 适用
  • 在 Elasticsearch 8.19 中,混合搜索(Hybrid Search)主要有两种核心策略

    kNN + Query 组合搜索(通常指线性加权融合)
    RRF(Reciprocal Rank Fusion)搜索
  • 截至 2026.1.21, RRF 功能在 Elasticsearch 8.19 中属于收费功能

正文

  • Elasticsearch 向量搜索通常使用 dense_vector 数据类型
  • Elasticsearch 向量搜索通常使用 kNN 搜索
  • 基本的 kNN 搜索示例 k-nearest neighbor (kNN) search

    POST byte-image-index/_search
    {
      "knn": {
          "field": "byte-image-vector",
          "query_vector": [-5, 9],
          "k": 10,
          "num_candidates": 100
      },
      "fields": ["title"]
    }
  • kNN 中使用 filter 过滤

    POST image-index/_search
    {
      "knn": {
          "field": "image-vector",
          "query_vector": [54, 10, -2],
          "k": 5,
          "num_candidates": 50,
          "filter": {
              "term": {"file-type": "png"}
          }
      },
      "fields": ["title"],
      "_source": false
    }
  • kNN 与 query 组合

    POST image-index/_search
    {
      "query": {
          "match": {
              "title": {
                  "query": "mountain lake",
                  "boost": 0.9
              }
          }
      },
      "knn": {
          "field": "image-vector",
          "query_vector": [54, 10, -2], 
          "k": 5,
          "num_candidates": 50,
          "boost": 0.1
      },
      "size": 10
    }
  • RRF 搜索示例

    GET example-index/_search
    {
      "retriever": {
          "rrf": { 
              "retrievers": [
                  {
                      "standard": { 
                          "query": {
                              "term": {
                                  "text": "shoes"
                              }
                          }
                      }
                  },
                  {
                      "knn": { 
                          "field": "vector",
                          "query_vector": [1.25, 2, 3.5],
                          "k": 50,
                          "num_candidates": 100
                      }
                  }
              ],
              "rank_window_size": 50,
              "rank_constant": 20
          }
      }
    }

相关阅读

本文出自 qbit snap

标签: elasticsearch, 向量搜索, kNN搜索, 混合搜索, RRF, dense_vector, Elasticsearch 8.19

添加新评论