issue-2026-03-26-ES文本搜索-补充多模态knn放入should-done-0327.md 2 KB

目前knn跟query里面是并列的层级,如下: { "size": 400, "from": 0, "query": { "bool": { "must": [... ], } }, "knn": { "field": "title_embedding", "query_vector": [...], "k": 120, "num_candidates": 400, "boost": 2, "name": "knn_query" }, 其中query的结构是这样的:
"query": { "bool": { "should": [ { "bool": { "name": "base_query", # 原始query } }, { "bool": { "name": "base_query_trans_zh", # 翻译query。有可能是basequery_transen,也有可能两者都有 "boost": 0.75 } } ], "minimum_should_match": 1 } }, 我想把knn放到should里面,和base
query、base_query_trans_zh并列。 另外,现在过滤是在knn里面单独加了一遍: "knn": { "field": "title_embedding", "query_vector": [...], "k": 120, "num_candidates": 400, "boost": 2, "_name": "knn_query", "filter": { "range": { "min_price": { "gte": 100, "lt": 200 } } } } 现在不需要了。因为knn在query的内层了。共用过滤。

另外: 我需要再增加一个knn。 需要参考文本embedding获得的逻辑, 通过 curl -X POST "http://localhost:6008/embed/clip_text?normalize=true&priority=1" \ -H "Content-Type: application/json" \ -d '["纯棉短袖", "street tee"]' (用 POST /embed/clip_text 生成多模态文本向量。和文本embedding获取方法类似。注意思考代码如何精简,不要冗余。) 得到文本的多模态embedding。 然后在这里补充一个多模态embedding,寻找图片相似的结果,对应的商品图片字段为image_embedding.vector。 重排融合:之前有knn的配置bias和exponential。现在,文本和图片的embedding相似需要融合,融合方式是dis_max,因此需要配置: 1)各自的权重和tie_breaker 2)整个向量方面的权重(bias和exponential)