elasticsearch 7.0 新特性之 Dense Ve
2019-04-16 本文已影响76人
郭彦超
es7.0 引入 Dense Vector 和 Sparse Vector 数据类型,为将来图片搜索场景提供支持
1、 介绍
目前新增的这两个数据类型还处于实验阶段,在之后发布的release版本中可能会被移除掉,所以大家要小心使用。
dense_vector存储稠密向量,sparse_vector存储稀疏向量;它们的value都是单一的float数值,可以是0、负数或正数;dense_vector数组的最大长度不能超过1024,每个文档的数组长度可以不同;sparse_vector存储的是个非嵌套类型的json对象,对象key是向量的位置,即integer类型的字符串,范围[0,65535]。
dense_vector与sparse_vector需要使用script score query进行查询,每个文档最终score代表待查询文档向量与被索引文档向量的相似程度。
2、操作
- dense vector
PUT my_index
{
"mappings": {
"properties": {
"my_vector": {
"type": "dense_vector"
},
"my_text" : {
"type" : "keyword"
}
}
}
}
PUT my_index/_doc/1
{
"my_text" : "text1",
"my_vector" : [0.5, 10, 6]
}
PUT my_index/_doc/2
{
"my_text" : "text2",
"my_vector" : [-0.5, 10, 10, 4]
}
- ** sparse vector**
PUT my_index
{
"mappings": {
"properties": {
"my_vector": {
"type": "sparse_vector"
},
"my_text" : {
"type" : "keyword"
}
}
}
}
PUT my_index/_doc/1
{
"my_text" : "text1",
"my_vector" : {"1": 0.5, "5": -0.5, "100": 1}
}
PUT my_index/_doc/2
{
"my_text" : "text2",
"my_vector" : {"103": 0.5, "4": -0.5, "5": 1, "11" : 1.2}
}