elasticsearch 7.0 新特性之 Dense Vector & Sparse Vector

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}
}

你可能感兴趣的:(elasticsearch 7.0 新特性之 Dense Vector & Sparse Vector)