云搜索服务 CSS-示例:使用PV_GRAPH算法实现向量检索:查询向量数据

时间:2024-08-15 16:33:56

查询向量数据

基于现有的Elasticsearch接口,在vector下新增filter参数支持向量标量联合过滤特性。标签过滤使用的过滤字段,当前支持json格式 ,支持should、must、must_not、term、terms查询, 语法与Elasticsearch查询语法一致。具体的限制如下。

当前过滤嵌套深度最大为4层 , 其中 :

  • must_not不支持嵌套和被嵌套。
  • 第一级必须只有一个查询关键词(must等),不支持多个关键词并列。

涉及指定联合过滤的标量字段,即创建索引时sub_fields所定义的字段,仅在向量索引类型为PV_GRAPH类型生效。当指定的过滤字段不存在时,过滤请求失效,当作无过滤条件处理。

# 单标签单值匹配查询示例
GET my_index/_search
{
  "query": {
    "vector": {
      "my_vector": {
        "vector": [1.0, 1.0],
        "topk": 10,
        "filter": {
          "term": { "country": "cn" }
        }
      }
    }
  }
}

# 单标签多值匹配查询示例
GET my_index/_search
{
  "query": {
    "vector": {
      "my_vector": {
        "vector": [1.0, 1.0],
        "topk": 10,
        "filter": {
          "terms": { "country": ["cn", "eu"] }
        }
      }
    }
  }
}

# 多标签匹配查询示例
GET my_index/_search
{
  "query": {
    "vector": {
      "my_vector": {
        "vector": [1.0, 1.0],
        "topk": 10,
        "filter": {
          "must": [
            {
              "term": {"country": "cn"}
            },
            {
              "terms": {"category": ["1", "2"]}
            }
          ]
        }
      }
    }
  }
}

# must_not匹配查询示例
GET my_index/_search
{
  "query": {
    "vector": {
      "my_vector": {
        "vector": [1.0, 1.0],
        "topk": 10,
        "filter": {
          "must_not": [
            {
              "term": {"country": "eu"}
            }
          ]
        }
      }
    }
  }
}

向量查询参数说明请见表1

support.huaweicloud.com/usermanual-css/css_01_0363.html