Ben*_*ala 9 javascript sorting indexing node.js elasticsearch
我正在尝试使用优先级异常按名称进行筛选和排序,这意味着即使结果按字母顺序排序,我也希望首先显示特定名称.
例如 - 这是我的基本查询
{
"from": 0,
"size": 500,
"min_score": 0.15,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "brand.id"
}
}
]
}
}
}
},
"sort": [
{
"brand.names.1.raw": "asc"
}
]
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我希望通过优先考虑 "rc-cola"对这个数组["pepsi","rc-cola","coca-cola"]进行排序,以便将其排序为["rc-cola" ,"可口可乐","百事可乐"]
现在它按字母顺序排序.我想到了一些可行的想法:
通过"匹配"添加"应该"提升.但后来我通过"_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"
]
},
Run Code Online (Sandbox Code Playgroud)
如果使用Elasticsearch版本1.x,则以下查询应为您提供预期的结果:(如果需要,可能需要稍作调整以使用原始字段)
{
"from": 0,
"size": 500,
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"term": {
"brand.names.1": "ccc",
"boost": 10
}
},
{
"exists": {
"field": "brand.id"
}
}
]
}
},
"filter": {
"exists": {
"field": "brand.id"
}
}
}
},
"sort": [
"_score",
{
"brand.names.1": {
"order": "asc"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
在更高版本的Elasticsearch上,过滤查询由bool查询代替,该查询应能完成工作(与上一个查询类似,如果需要,可以使用原始字段)
{
"from": 0,
"size": 500,
"query": {
"bool": {
"filter": {
"exists": {
"field": "brand.id"
}
},
"should": [
{
"term": {
"brand.names.1": "ccc"
}
}
]
}
},
"sort": [
"_score",
{
"brand.names.1": {
"order": "asc"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,如果您想以给定顺序让顶部填充多个首选匹配项,则可以使用boost函数
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |