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)
|