更新时间: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:汉明距离
父主题: 向量检索