Elasticsearch8.x KNN search 使用方式及参数介绍

一 KNN Search介绍

        Elasticsearch 使用HNSW 算法来支持高效的 kNN 搜索。与大多数 kNN算法一样,HNSW是一种近似方法,它牺牲了结果准确性以提高搜索速度。

        ES8.x 升级的KNN(相似度算法)功能需要 dense_vector 字段类型支持,而不是传统的 text 和 keyword 类型。

使用场景有如下两点:

  • 在script_score查询中,对匹配过滤器的文档进行评分
  • 在KNN 搜索API中,查找与查询向量最相似 的k个向量

注意:

1、dense_vector类型不支持聚合或排序。

2、dense_vector字段类型的值必须为浮点型的数组。例如  [0.5, 10, 6]

二 使用方式及参数介绍

创建dense_vector字段的索引,需要用如下方式

#创建索引
PUT my-index
{
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "dense_vector",
        "dims": 3,
        "index": true,
        "similarity": "dot_product" 
      },
      "my_text" : {
        "type" : "keyword"
      }
    }
  }
}

# 添加数据
PUT my-index/_doc/1
{
  "my_text" : "text1",
  "my_vector" : [0.5, 10, 6]
}

PUT my-index/_doc/2
{
  "my_text" : "text2",
  "my_vector" : [-0.5, 10, 10]
}

type:

dense_vector 表示此字段为向量字段

dims:

(必需,整数)向量维数。

当index参数为 true的时候,此值必须小于等于1024;

当index参数为 false的时候,此值必须小于等于2048;

index:

(可选,布尔值)默认false,当配置为true的时候,启用KNN 搜索

similarity:

(必需,字符串)在 KNN 搜索中使用的向量相似度度量。文档根据其向量字段与查询向量的相似性进行排名。每个文档的得分都将从相似性中得出,分数值都是正数,并且分数越大对应的排名越高。此外,如果index参数是true,则此参数是必需的。如果index为false,此参数不生效。

        可选的值包含以下三种:

        l2_norm

        根据向量之间的 L 2距离(也称为欧几里得距离)计算相似度。文档得分计算公式为:

        1 / (1 + l2_norm(query, vector)^2)
        dot_product

        计算两个向量的点积。此选项提供了一种执行余弦相似度的优化方法。为了使用它,所有向量必须是单位长度的,包括文档向量和查询向量。文档得分计算公式为:

        (1 + dot_product(query, vector)) / 2
        cosine

        计算余弦相似度。请注意,执行余弦相似度的最有效方法是将所有向量归一化为单位长度,而不是使用 dot_product. 只有cosine在需要保留原始向量且无法提前对其进行归一化时才应使用。文档得分计算公式为:

        ​​​​​​​(1 + cosine(query, vector)) / 2

        cosine相似性不允许具有零幅度的向量,因为在这种情况下没有定义余弦 。

index_options

(可选,对象)配置 kNN 索引算法的可选部分。HNSW 算法有两个影响数据结构构建方式的内部参数。可以调整这些以提高结果的准确性,但会降低索引速度。使用index_options时,必须定义其所有属性。属性包含以下三种:

type
(必需,字符串)要使用的 kNN 算法的类型。目前仅支持 hnsw 。
m
(必需,整数)每个节点将在 HNSW 图中连接到的邻居数。默认为16。
ef_construction
(必需,整数)在为每个新节点组装最近邻居列表时要跟踪的候选者数量。默认为100。

三 KNN使用限制

1、KNN 搜索不支持使用 filtered alias 。
2、dense_vector类型的字段不允许使用在定义了nested的mapping上
3、Elasticsearch 使用HNSW 算法来支持高效的 kNN 搜索。与大多数 kNN 算法一样,HNSW 是一种近似方法,它牺牲了结果准确性以提高搜索速度。这意味着返回的结果并不总是真正的k最近邻。说白了就是不仅慢,还不准确。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值