一、写法一:retriever 方式(Elastic 8.16正式发布)
retriever 方式详情请参见 Retrievers。
注意:说明:
注意:腾讯云 ES 在 8.16 自研支持 rrf 算法,写法上,将下面 rrf 替换成 rank_fusion;Elastic 从 9 版本开始支持 rrf。
GET /book-index/_search{ "retriever": { "rrf": { // 腾讯云 ES 8.16 写成 rank_fusion,之后版本写成 rrf "retrievers": [ { "retriever": { "knn": { "field": "title_vector", "query_vector": [0.1, 0.2, 0.3 …], "k": 10, "num_candidates": 100 } }, "weight": 0.8 }, { "retriever": { "standard": { "query": { "match": { "title_text": "人类" } } } }, "weight": 0.2 } ], "rank_window_size": 50, "rank_constant": 20 } }}
二、写法二:传统写法(此方式已弃用,不推荐)
GET /book-index/_search{ "knn":{ "field":"content_vector", "query_vector": [0.5, 0.6, 0.7 …], "k":10, "num_candidates": 100 }, "query":{ "match":{ "title_text":{ "query":"人类" } } }, "rank":{ "rrf":{ "rank_window_size":50, "rank_constant":20 } }, "size": 10}
参数说明:
·rank_window_size:从每个查询中取多少结果参与融合,默认值100
·rank_constant:控制排名的常数,值越小排名影响越大,默认值60
RRF 的计算公式如下: