背景:向量检索是文本相似度检索,现在增加新的字段进行过滤,如果以filter方式进行过滤,那么最终结果不保证有topK个,甚至一个都没有,因为它是先进行topK个向量召回,再进行filter。
当然有人建议采用scriptScore方式进行检索,但此方式可能造成请求压力过大,内存消耗。
scriptScore方式如下:
POST my_index/_search { "size":2, "query": { "script_score": { "query": { "match_all": {} }, "script": { "source": "vector_score", "lang": "vector", "params": { "field": "my_vector", "vector": [1.0, 2.0], "metric": "euclidean" } } } } }
相关python代码如下:
query_json = {"size": k,"_source": {"include": ["