【发布时间】:2017-07-27 20:41:08
【问题描述】:
我正在尝试使用优先级例外按名称进行过滤和排序,这意味着即使结果按字母顺序排序,我也希望特定名称首先出现。
例如 - 这是我的基本查询
{
"from": 0,
"size": 500,
"min_score": 0.15,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "brand.id"
}
}
]
}
}
}
},
"sort": [
{
"brand.names.1.raw": "asc"
}
]
}
简而言之,我希望这个数组 ["pepsi" , "rc-cola", "coca-cola"] 通过将 top priority 赋予 "rc-cola" 进行排序,以便它将被排序为 ["rc-cola", "coca-cola", "pepsi"]
现在它按字母顺序排序。 我想到了一些可行的想法:
添加一个“应该”并通过“匹配”进行提升。但后来我遇到了问题 按“_score”排序,它打破了我按字母顺序排序,尽管我首先按“_score”和品牌名称排序。将其添加到“bool”的示例:“should”:[{“match”:{“brand.id”:{“query”:34709,“boost”:20}}}
我尝试使用“聚合”,以便第一个查询(存储桶)是 “匹配”特定品牌名称并按字母顺序在里面排序, 第二个查询将仅按字母顺序排序。但我完全搞砸了。
我必须使用过滤 -> 过滤器,我不能使用脚本查询。 谢谢。
更新 这是一个文档示例以及它现在是如何排序的。 我希望优先考虑“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"
]
},
【问题讨论】:
-
以下。我也尝试在没有脚本的情况下做同样的事情。
-
那个数组是什么?您希望品牌按您的优先级排序还是什么?
-
如果您发布文档示例和预期结果将有助于理解
-
@VolodymyrBilyachat - 帖子更新
-
能否指出您使用的 Elasticsearch 版本?我相信这与可用的选项有关。
标签: javascript node.js sorting elasticsearch indexing