• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Elasticsearch8.x KNN search 使用方式和参数

武飞扬头像
小帅毛
帮助3

一 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字段的索引,需要用如下方式

  1.  
    #创建索引
  2.  
    PUT my-index
  3.  
    {
  4.  
    "mappings": {
  5.  
    "properties": {
  6.  
    "my_vector": {
  7.  
    "type": "dense_vector",
  8.  
    "dims": 3,
  9.  
    "index": true,
  10.  
    "similarity": "dot_product"
  11.  
    },
  12.  
    "my_text" : {
  13.  
    "type" : "keyword"
  14.  
    }
  15.  
    }
  16.  
    }
  17.  
    }
  18.  
     
  19.  
    # 添加数据
  20.  
    PUT my-index/_doc/1
  21.  
    {
  22.  
    "my_text" : "text1",
  23.  
    "my_vector" : [0.5, 10, 6]
  24.  
    }
  25.  
     
  26.  
    PUT my-index/_doc/2
  27.  
    {
  28.  
    "my_text" : "text2",
  29.  
    "my_vector" : [-0.5, 10, 10]
  30.  
    }
学新通

type:

dense_vector 表示此字段为向量字段

dims:

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

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

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

index:

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

similarity:

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

        可选的值包含以下三种:

        l2_norm

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

        学新通
        dot_product

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

        学新通
        cosine

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

        学新通

        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最近邻。说白了就是不仅慢,还不准确。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhikbf
系列文章
更多 icon
同类精品
更多 icon
继续加载