Elasticsearch的Dense vector字段类型用于存储密集的向量(例如,浮点数数组),通常用于机器学习模型的特征向量。这些向量可以用来计算文档之间的相似度。
本文将介绍Dense vector字段类型在Elasticsearch中的使用。
一、创建映射(Mapping)
在Elasticsearch中创建一个索引,并为该索引定义一个映射(Mapping)。在这个映射中,我们可以指定一个字段为Dense vector类型,并指定向量的维度。
PUT /my_index
{
"mappings": {
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 3 // 指定向量的维度为3
},
"my_text": {
"type": "text"
}
}
}
}
在这个例子中,我们创建了一个名为my_index的索引,其中包含一个名为my_vector的Dense vector字段和一个名为my_text的文本字段。
GET my_index/_mapping
二、索引文档 (Indexing Documents)
接下来,我们可以开始索引包含Dense vector的文档。
PUT /my_index/_doc/1
{
"my_text": "文本内容",
"my_vector": [1.5, 2.5, 3.5]
}
我们向my_index索引中添加了一个文档,其中my_vector字段是一个三维向量。
三、使用向量进行搜索 (Searching with Vectors)
我们可以使用向量字段进行相似度搜索。例如,可以使用余弦相似度函数找到与给定向量最相似的文档。
POST /my_index/_search
{
"query": {
"script_score": {
"query" : {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, 'my_vector') + 1.0",
"params": {
"query_vector": [4, 3.5, 4]
}
}
}
}
}
在示例中,我们使用了script_score查询来计算每个文档的得分,这个得分基于my_vector字段和提供的查询向量[4, 3.5, 4]之间的余弦相似度。