我想按名称筛选并按名称排序优先级异常,这意味着即使结果按字母顺序排序,我也希望首先显示特定名称。Elasticsearch - 根据名称进行过滤和按优先级排序
例如 - 这是我的基本查询
{
"from": 0,
"size": 500,
"min_score": 0.15,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "brand.id"
}
}
]
}
}
}
},
"sort": [
{
"brand.names.1.raw": "asc"
}
]
}
总之,我想这个数组[“百事可乐”,“RC-可乐”,“可口可乐”]来通过给顶部进行排序优先到“rc-cola”,以便将其排序为[“rc-cola”,“coca-cola”,“pepsi”]
现在它按字母顺序排序。 我想到了可以工作的一些想法:
添加一个“应该”与“匹配”提升。但后来我有 排序问题“_score”,它打破了我的字母排序,虽然我第一次按“_score”和品牌名称排序。添加到“bool”中的示例:“should”:[{“match”:{“brand.id”:{“query”:34709,“boost”:20}}}
我试过“聚合”,以便第一个查询(存储桶)将 “匹配”特定品牌名称并按字母顺序排序,第二个查询将仅按字母顺序排序。但我完全搞砸了。
我必须使用过滤 - >过滤器,我不能使用脚本查询。 谢谢。
UPDATE 下面是一个文档示例以及它如何排序。 我希望首先将“ccc”品牌列为优先,请帮助我更新我的查询。
{
"_index": "retailer1",
"_type": "product",
"_id": "1",
"_score": null,
"_source": {
"id": 1,
"brand": {
"names": {
"1": "aaa"
},
"id": 405
}
},
"sort": [
"aaa"
]
},
{
"_index": "retailer1",
"_type": "product",
"_id": "2",
"_score": null,
"_source": {
"id": 2,
"brand": {
"names": {
"1": "bbb"
},
"id": 406
}
},
"sort": [
"bbb"
]
},
{
"_index": "retailer1",
"_type": "product",
"_id": "3",
"_score": null,
"_source": {
"id": 3,
"brand": {
"names": {
"1": "ccc"
},
"id": 407
}
},
"sort": [
"ccc"
]
},
正在关注。我也试图在没有脚本的情况下做同样的事情。 – Yissachar
这是什么阵列?你想要品牌按照你的优先顺序排序还是什么? –
如果您发布文档示例和预期结果,它将有助于理解 –