es检索之复合检索

背景:向量检索是文本相似度检索,现在增加新的字段进行过滤,如果以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": ["

你可能感兴趣的:(Notebook,elasticsearch,python,大数据,向量检索,精准查询,复合查询)