向量查询 复合查询 向量检索支持与其他ES子查询组合进行复合查询,比如布尔查询、后置过滤等。 以下两个示例的查询结果:首先查询top10条与查询向量距离最近的结果,filter作为过滤条件将仅保留mylabel字段为“red”的结果。 布尔查询示例 POST myindex/search { "size": 10, "query": { "bool": { "must": { "vector": { "myvector": { "vector": [1, 2], "topk": 10 } } }, "filter": { "term": { "mylabel": "red" } } } } } 后置过滤示例 GET myindex/search { "size": 10, "query": { "vector": { "myvector": { "vector": [1, 2], "topk": 10 } } }, "postfilter": { "term": { "mylabel": "red" } } } ScriptScore查询 写入向量数据后,针对向量字段可以使用ScriptScore进行最近邻查询,查询语法如下所示。 前置过滤条件可以为任意查询,scriptscore仅针对前置过滤的结果进行遍历,计算向量相似度并排序返回。此种查询方式的性能取决于前置过滤后中间结果集的大小,当前置过滤条件为"matchall"时,相当于全局暴力检索。 POST myindex/search { "size":2, "query": { "scriptscore": { "query": { "matchall": {} }, "script": { "source": "vectorscore", "lang": "vector", "params": { "field": "myvector", "vector": [1.0, 2.0], "metric": "euclidean" } } } } } scriptscore参数说明 参数 说明 source script脚本描述,使用向量相似度打分时为固定值"vectorscore"。 lang script语法描述,使用固定值"vector"。 field 向量字段名称。 vector 查询向量数据。 metric 度量方式,可选值为:euclidean、innerproduct、cosine、hamming。 默认值:euclidean