Elasticsearch:dense vector 数据类型及标量量化
在Elasticsearch中,dense_vector
数据类型用于存储密集向量,这些向量可以用于相似度搜索。密集向量是一组数值,没有缺失数据。
以下是一个创建包含 dense_vector
类型字段的映射的示例:
PUT my_index
{
"mappings": {
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 3 // 指定向量的维度
}
}
}
}
然后,您可以索引一个密集向量:
POST my_index/_doc/1
{
"my_vector": [0.5, 10, 100.5] // 向量的值
}
Elasticsearch 使用量化来优化向量的存储和搜索性能。量化是将向量中的每个数值除以一个量化范围(quantization\_gap),然后将结果舍入到最近的整数。这减少了需要存储的字节数,并允许更快的相似度搜索。
以下是一个量化向量搜索的示例:
POST my_index/_search
{
"size": 10,
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, 'my_vector') + 1.0",
"params": {
"query_vector": [0.7, 11, 101.5] // 查询向量的值
}
}
}
}
}
在这个例子中,我们使用了一个脚本查询来计算查询向量和文档向量之间的余弦相似度,并将结果作为评分因子。这允许Elasticsearch执行基于向量相似度的查询。
评论已关闭