使用Elasticsearch实例向量检索功能增强搜索能力 本文为您介绍如何使用Elasticsearch实例中的向量检索能力,增强实例的搜索能力。 概述 向量检索(Vector Search)是Elasticsearch的高级功能,允许用户在高维向量空间中进行相似性搜索,超越了传统的关键词匹配方式。通过将文本、图像等数据转换为向量表示,基于向量之间的距离进行搜索,适合自然语言处理、推荐系统和计算机视觉等复杂场景。 天翼云云搜索服务开通的Elasticsearch 支持通过近似最近邻(ANN)搜索算法实现高效的向量索引结构,使得在处理大规模数据集时依然能保持高效的查询速度和准确性。 前提条件 已开通天翼云云搜索服务 Elasticsearch 集群。 Elasticsearch 版本支持KNN向量检索功能(当前版本默认支持)。 本地环境已配置好API访问权限,且能够通过API与集群通信。 操作步骤 1. 创建支持向量检索的索引,需要创建一个支持向量检索的索引。可以使用以下命令为一个包含向量字段的索引启用 KNN 功能。 PUT myknnindex1 { "settings": { "index": { "knn": true, "knn.algoparam.efsearch": 100 } }, "mappings": { "properties": { "category": { "type": "keyword" }, "brand": { "type": "keyword" }, "style": { "type": "keyword" }, "myvector": { "type": "knnvector", "dimension": 3 } } } } knn: 设置为 true 启用向量检索。 dimension: 定义向量的维度,在这个例子中为 3。 2. 插入向量数据,创建索引后,可以插入带有向量字段的数据文档。以下是插入不同类型商品的向量示例: PUT myknnindex1/doc/1 { "category": "electronics", "brand": "brandA", "style": "modern", "myvector": [0.5, 0.8, 0.3] } PUT myknnindex1/doc/2 { "category": "furniture", "brand": "brandB", "style": "vintage", "myvector": [0.2, 0.4, 0.7] } PUT myknnindex1/doc/3 { "category": "clothing", "brand": "brandC", "style": "casual", "myvector": [0.9, 0.1, 0.6] } 3. 执行向量检索查询,插入数据后,用户可以通过查询指定的向量来查找与之相似的数据。以下示例将基于向量 [0.5, 0.8, 0.3] 进行KNN检索,返回与之最相似的2条记录。 POST myknnindex1/search { "size": 10, "query": { "knn": { "myvector": { "vector": [0.5, 0.8, 0.3], "k": 2 } } } } vector: 查询的向量值。 k: 返回与查询向量最相似的k个结果,此处为2。 4. 查询返回示例,返回结果中将包含与查询向量最相似的文档及其相似度得分(score): { "took" : 654, "timedout" : false, "shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 3, "relation" : "eq" }, "maxscore" : 1.0, "hits" : [ { "index" : "myknnindex1", "id" : "1", "score" : 1.0, "source" : { "category" : "electronics", "brand" : "brandA", "style" : "modern", "myvector" : [0.5, 0.8, 0.3] } }, { "index" : "myknnindex1", "id" : "2", "score" : 0.7092199, "source" : { "category" : "furniture", "brand" : "brandB", "style" : "vintage", "myvector" : [0.2, 0.4, 0.7] } } ] } } 通过这些步骤,用户可以在Elasticsearch集群上实现基于向量的高效相似性搜索,支持从多维数据中快速找到最相似的结果,从而提升搜索体验和智能化水平。