Blame view

docs/issues/issue-2026-03-26-ES文本搜索-补充多模态knn放入should-done-0327.md 2 KB
8c8b9d84   tangwang   ES 拉取 coarse_rank...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  目前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。有可能是base_query_trans_en,也有可能两者都有
              "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)