- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试查询包含产品信息的 ES 索引,其中包含 product_id、category_id 和 variant_id 字段。每个产品都属于特定的类别和变体:
{
"product_id" : "PRODUCT_12345",
"category_id" : 1,
"variant_id" : 5
}
我还有 product_id 列表及其分数:
[{'product_id': 'PRODUCT_46831', 'score': 1}, {'product_id': 'PRODUCT_47139', 'score': 0.95}, {'product_id': 'PRODUCT_46833', 'score': 0.8999999999999999}, {'product_id': 'PRODUCT_46834', 'score': 0.8499999999999999}, {'product_id': 'PRODUCT_46835', 'score': 0.7999999999999998}]
这些分数是使用算法计算的,每个 product_id 都存在于 ES 中。我想过滤列表,以便从每个类别和变体中只选择一个产品。应从每个类别和变体中选择得分最高的产品。所以对于上面的列表,如果
PRODUCT_46831, PRODUCT_47139, PRODUCT_46833
属于
category 1
.
PRODUCT_46834, PRODUCT_46835
属于
category 2
.
PRODUCT_46831, PRODUCT_46834
属于
variant 1
和
PRODUCT_46833, PRODUCT_47139, PRODUCT_46835
属于
variant 2
, 类别分组将创建列表
[PRODUCT_46831, PRODUCT_46834]
, 自
PRODUCT_46831, PRODUCT_46834
是这些类别中得分最高的产品:
PRODUCT_46831, PRODUCT_46834
在 variant_id 上将创建结果:
[PRODUCT_46831]
自
PRODUCT_46831, PRODUCT_46834
同属
variant id 1
和
PRODUCT_46831
在列表中得分最高。
{
"query": {
"function_score": {
"functions": [
{
"field_value_factor":
{
"field": "item_id",
"factor": 0
}
},
{
"filter": { "term": { "id": "PRODUCT_46831" } },
"weight": 1
},
{
"filter": { "term": { "id": "PRODUCT_47139" } },
"weight": 0.95
},
{
"filter": { "term": { "id": "PRODUCT_46833" } },
"weight": 0.9
},
{
"filter": { "term": { "id": "PRODUCT_46834" } },
"weight": 0.85
},
{
"filter": { "term": { "id": "PRODUCT_46835" } },
"weight": 0.8
}
],
"score_mode": "sum",
"boost_mode": "sum",
"query" : {
"bool" : {
"must" : [
{
"terms" : {
"id" : [
"PRODUCT_46831",
"PRODUCT_47139",
"PRODUCT_46833",
"PRODUCT_46834",
"PRODUCT_46835"
],
"boost" : 0
}
}
],
"adjust_pure_negative" : true,
"boost" : 0
}
}
}
},
"aggs" : {
"category_id_max_product" : {
"terms" : { "field": "category_id" },
"aggs": {
"max_score": {
"top_hits": {
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"_source": {
"includes": ["_id", "category_id", "variant_id", "_score"]
},
"size": 1
}
}
}
}
}
, "_source": ["_id", "category_id", "variant_id", "_score"]
, "size": 0
}
文件 :
{
"_index" : "search_entities",
"_type" : "_doc",
"_id" : "PRODUCT_46831",
"_score" : null,
"_source" : {
"category_id" : 2296,
"variant_id" : 564819,
"id" : "PRODUCT_46831"
}
},
{
"_index" : "search_entities",
"_type" : "_doc",
"_id" : "PRODUCT_47139",
"_score" : null,
"_source" : {
"category_id" : 2296,
"variant_id" : 723311,
"id" : "PRODUCT_47139"
}
},
{
"_index" : "search_entities",
"_type" : "_doc",
"_id" : "PRODUCT_46833",
"_score" : null,
"_source" : {
"category_id" : 2296,
"variant_id" : 723311,
"id" : "PRODUCT_46833"
}
},
{
"_index" : "search_entities",
"_type" : "_doc",
"_id" : "PRODUCT_46834",
"_score" : null,
"_source" : {
"category_id" : 3321,
"variant_id" : 564819,
"id" : "PRODUCT_46834"
}
},
{
"_index" : "search_entities",
"_type" : "_doc",
"_id" : "PRODUCT_46835",
"_score" : null,
"_source" : {
"category_id" : 3321,
"variant_id" : 723311,
"id" : "PRODUCT_46835"
}
},
最佳答案
我可以使用脚本化指标来做到这一点,不是优化的指标,但有效:
{
"query": {
"function_score": {
"functions": [
{
"filter": { "term": { "id": "PRODUCT_229648" } },
"weight": 0.9
},
{
"filter": { "term": { "id": "PRODUCT_108882" } },
"weight": 0.95
},
{
"filter": { "term": { "id": "PRODUCT_108881" } },
"weight": 0.8
},
{
"filter": { "term": { "id": "PRODUCT_172062" } },
"weight": 0.95
},
{
"filter": { "term": { "id": "PRODUCT_172060" } },
"weight": 0.9
},
{
"filter": { "term": { "id": "PRODUCT_216303" } },
"weight": 0.95
},
{
"filter": { "term": { "id": "PRODUCT_220975" } },
"weight": 0.96
}
],
"boost_mode": "sum",
"query" : {
"bool" : {
"must" : [
{
"terms" : {
"id" : [
"PRODUCT_229648",
"PRODUCT_108882",
"PRODUCT_108881",
"PRODUCT_172062",
"PRODUCT_172060",
"PRODUCT_216303",
"PRODUCT_220975"
]
}
}
],
"adjust_pure_negative" : true
}
}
}
},
"aggs": {
"intentPathsCountAgg": {
"scripted_metric": {
"init_script": """state.messagesList = new ArrayList();
state.allVariantMap = new HashMap();
state.variantMap = new HashMap();
state.categoryMap = new HashMap();
state.emptyVariantMap = new ArrayList();
""",
"map_script": """
double score = _score;
String key = String.valueOf(doc['variant_group_id'].value);
Map map = [
'score' : score,
'category_id' : String.valueOf(doc['category_brand_id'].value),
'product_id' : doc['item_id'].value
];
if (state.variantMap.containsKey(key)) {
if (state.variantMap.get(key).score < score) {
state.variantMap.put(key, map);
}
}
else {
state.variantMap.put(key, map);
}
""",
"combine_script": """
return state.variantMap;
""",
"reduce_script": """
Map categoryMap = new HashMap();
for (state in states) {
for (String key : state.keySet()) {
String categoryKey = state.get(key).category_id;
double score = state.get(key).score;
long productId = state.get(key).product_id;
Map map = [
'score' : score,
'product_id' : productId
];
if (categoryMap.containsKey(categoryKey)) {
if (categoryMap.get(categoryKey).score < score) {
categoryMap.put(categoryKey, map);
}
}
else {
categoryMap.put(categoryKey, map);
}
}
}
return categoryMap;
"""
}
}
}
, "_source": ["_id", "category_id", "variant_group_id", "item_id", "id"]
, "size": 0
}
关于ElasticSearch 从每个类别中选择一个得分最高的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69100152/
学生分数的正则表达式是什么:12.5, 99.5, 87, 1.66 该字段可以为空 (.) 的最大字符长度为 5,如下所示:99.99 分数介于 0 到 100 之间 我用过这个,但是不起作用 va
对于服务器游戏...我有表珠宝: rank,player_id, plscore. 我想显示按分数从高到低排序的前 10 名玩家,如果当前玩家不在前 10 名,则加上当前玩家的分数。 如果我/你目前不
我的游戏中颜色很少: class GameScene: SKScene { let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColo
我正在尝试用 HTML 创建一个简单的多项选择程序,但我在获取用户输入并在最后显示他们的分数时遇到了问题。有人可以帮帮我吗? 我的多项选择测验有 10 个问题,每个问题有 4 个选择。 例如有一个问题
有谁知道如何使用 Foursquare API 获取 field 的分数/评级(例如 9.0/10)? 我正在通过无用户访问进行连接。 https://developer.foursquare.com
我希望能够计算一个矩形相对于矩形网格的 Jaccard 分数/距离(距离为 1 分)。我的网格是 50x50(总共 1625625 个矩形)。 我能够在 0.34 秒内针对所有这些计算出我的输入矩形的
我有这样的文件(当然是简化的情况): Category: A, Rating: 10 Category: A, Rating: 9 Category: A, Rating: 5 Category: B
我想每秒将分数增加 1 分,但我很难让它正常工作。 例如 (伪代码): int score = 0f // on create updateEverySecond() { score += 1
我现在正在制作一款新游戏,您可以在其中保存您的高分,但我不知道是否可以实现 Facebook 排行榜。这样用户就可以看到他们的 friend 并看到他们的高分是多少。这可能吗?好吧,我在不同的应用程序
谁能帮我把它转换成 C#。这真的伤害了我的大脑。 http://www.evanmiller.org/how-not-to-sort-by-average-rating.html require 's
最好的方法是什么才能让标签包含击杀数、生命值或随着与其相关的变量发生变化而更新的分数?目前我只是使用 SKLabelNode 并使用变量为其分配文本,但未计算文本属性,因此它在初始化后保持静态。每次更
我有一个 Wordpress 网站。尝试使用 Google PageSpeed Insights Tool 获得 100/100 分数,但遇到 1 个“错误”。谷歌表示; Eliminate rend
自 V5 以来,与 V4 相比,评分发生了变化。该文档解释了性能、渐进式 Web 应用程序、可访问性、最佳实践和 SEO 的分数,但没有解释总体分数。根据图片,桌面版为 59。 任何人都可以帮助我了解
我运行了自述文件中的示例代码 tryolabs/TLSphinx README.md ,Hypothesis的text属性的结果是空格,而score属性的结果是负数-4420。 为什么我在假设的文本属
确保我做对了: 如果我们使用 sklearn.metrics.log_loss独立的,即 log_loss(y_true,y_pred),它产生一个正分数——分数越小,性能越好。 但是,如果我们使用
我有一个 iframe加载第三方小部件。我只想显示这个iframe在我的页面加载后,因为我不想减慢我的页面加载速度。我关注了 medium article其中描述了如何执行此操作,但他们的解决方案不起
我是一名优秀的程序员,十分优秀!