更新时间:2024-11-29 GMT+08:00

查询向量

  • 基础查询

    基础查询针对创建了向量索引的向量字段,提供了特殊的向量查询语法。第一个“vector”关键字表示该查询类型为VectorQuery,“my_vector”指定了需要查询的向量字段名称。第二个“vector”指定查询向量的具体值,支持数组形式以及Base64编码形式的输入。“topk”的值通常与“size”保持一致。例如,下述查询将会返回所有数据中与查询向量最近的size(topk)条(即2条)数据。

    POST my_index/_search 
     { 
       "size": 2, 
       "query": { 
         "vector": { 
           "my_vector": { 
             "vector": [1.0, 2.0], 
             "topk": 2 
           } 
         } 
       } 
     } 
  • 复合查询

    向量检索支持与其他Elasticsearch子查询组合进行复合查询,比如布尔查询、后置过滤等。

    • 布尔查询示例
      POST my_index/_search 
       { 
         "size": 10, 
         "query": { 
           "bool": { 
             "must": { 
               "vector": { 
                 "my_vector": { 
                   "vector": [1.0, 2.0], 
                   "topk": 10 
                 } 
               } 
             }, 
             "filter": { 
               "term" : { "tags" : "production" } 
             }, 
             "must_not" : { 
               "range" : { "age" : {"gte" : 10, "lte" : 20} } 
             } 
           } 
         } 
       } 

      上述示例中,首先查询topk(10)条与查询向量距离最近的结果,filter作为过滤条件将仅保留tags字段为“production”的结果,range子句的修饰符为must_not,表示将剔除range查询得到的结果,从而得到最终的结果,最终的结果数可能小于topk条。

    • 后置过滤示例
      GET my_index/_search 
       { 
         "size": 10, 
         "query": { 
           "vector": { 
             "my_vector": { 
               "vector": [1.0, 2.0], 
               "topk": 10 
             } 
           } 
         }, 
         "post_filter": { 
           "term": { "tags": "production" } 
         }
       }
  • 查询打分

    当使用GRAPH_PQ索引时,查询结果是根据PQ计算的非对称距离进行排序。CSS支持Rescore的方式对查询结果进行重打分精排,提升召回率。假设my_index是PQ类型的索引,Rescore示例如下:

    GET my_index/_search 
     { 
       "size": 10, 
       "query": { 
         "vector": { 
           "my_vector": { 
             "vector": [1.0, 2.0], 
             "topk": 100 
           } 
         } 
       }, 
       "rescore": { 
         "window_size": 100, 
         "vector_rescore": { 
           "field": "my_vector", 
           "vector": [1.0, 2.0], 
           "metric": "euclidean" 
         } 
       } 
     }
    表1 Rescore参数说明

    参数

    说明

    window_size

    向量检索将会返回topk条结果,仅取前window_size条结果精排。

    field

    向量字段名称。

    vector

    查询向量数据。

    metric

    度量方式,默认值:euclidean。可选值为:

    • euclidean:欧几里得距离
    • inner_product:内积
    • cosine:余弦距离
    • hamming:汉明距离