使用OpenSearch实例向量检索功能增强搜索能力
 
                  更新时间 2024-11-26 11:25:24
                 
 
                    最近更新时间: 2024-11-26 11:25:24
                  
 本文为您介绍如何使用OpenSearch实例中的向量检索能力,增强实例的搜索能力。
 概述
向量检索(Vector Search)是OpenSearch 的高级功能,它允许用户在高维向量空间中进行相似性搜索。这一功能不仅基于传统的关键词匹配,还支持通过向量表示的方式来处理更复杂的查询场景,例如自然语言处理、推荐系统和计算机视觉等。
天翼云云搜索服务开通的OpenSearch集群通过集成近似最近邻(ANN)搜索算法,确保在大规模数据集上实现高效、精准的向量检索,使用户可以快速找到与查询向量最相似的结果。
前提条件
- 已开通天翼云云搜索服务OpenSearch 集群。
- OpenSearch 版本支持KNN向量检索功能(当前版本默认支持)。
- 本地环境已配置好API访问权限,且能够通过 API 与集群通信。
操作步骤
- 创建支持向量检索的索引。在OpenSearch中,可以通过以下命令创建一个启用了KNN功能的索引,用于向量检索:
PUT my-knn-index-1
{
  "settings": {
    "index": {
      "knn": true,
      "knn.algo_param.ef_search": 100
    }
  },
  "mappings": {
    "properties": {
      "category": {
        "type": "keyword"
      },
      "brand": {
        "type": "keyword"
      },
      "style": {
        "type": "keyword"
      },
      "my_vector": {
        "type": "knn_vector",
        "dimension": 3
      }
    }
  }
}
- knn: 设置为 true 以启用向量检索功能。
- dimension: 指定向量的维度,这里设置为 3。
- 插入向量数据。创建好索引后,可以通过以下命令插入具有向量字段的数据:
PUT my-knn-index-1/_doc/1
{
  "category": "electronics",
  "brand": "brandA",
  "style": "modern",
  "my_vector": [0.5, 0.8, 0.3]
}
PUT my-knn-index-1/_doc/2
{
  "category": "furniture",
  "brand": "brandB",
  "style": "vintage",
  "my_vector": [0.2, 0.4, 0.7]
}
PUT my-knn-index-1/_doc/3
{
  "category": "clothing",
  "brand": "brandC",
  "style": "casual",
  "my_vector": [0.9, 0.1, 0.6]
}
- 执行向量检索查询。数据插入完成后,可以通过向量进行检索。以下是一个查询示例,它将基于向量 [0.5, 0.8, 0.3] 进行KNN搜索,并返回最相似的2条记录:
POST my-knn-index-1/_search
{
  "size": 10,
  "query": {
    "knn": {
      "my_vector": {
        "vector": [0.5, 0.8, 0.3],
        "k": 2
      }
    }
  }
}
- vector: 要进行相似性检索的向量值。
- k: 返回与查询向量最相似的k个结果,此例中为2。
- 查询返回结果示例。以下为检索后的返回结果,其中包含与查询向量最相似的数据文档及其相似度得分(_score):
{
  "took" : 200,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my-knn-index-1",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "category" : "electronics",
          "brand" : "brandA",
          "style" : "modern",
          "my_vector" : [0.5, 0.8, 0.3]
        }
      },
      {
        "_index" : "my-knn-index-1",
        "_id" : "2",
        "_score" : 0.7092199,
        "_source" : {
          "category": "furniture",
          "brand": "brandB",
          "style": "vintage",
          "my_vector": [0.2, 0.4, 0.7]
        }
      }
    ]
  }
}
通过这些步骤,用户可以在OpenSearch集群中轻松实现基于向量的相似性搜索功能,支持高效处理海量数据并提升搜索体验。
