elasticsearch - 基于元素的Elasticsearch脚本排序存在于数组中
问题描述
我有这样一份文件清单:
[
{
"id": 123,
"name": "Ram",
"status": 1,
"activity": "Poster Design",
"categories": [1, 2, 3, 4, 5]
},
{
"id": 124,
"name": "Leo",
"categories": [5],
"status": 1,
"activity": "Brochure"
},
{
"id": 126,
"name": "Leo",
"categories": [3],
"status": 1,
"activity": "Brochure"
},
{
"id": 134,
"name": "Levin",
"categories": [1],
"status": 1,
"activity": "3D Printing"
}
]
如果我对包含 1 的类别进行排序(这可以是 3 或 5 或 7),我想要输出。因此,它将首先对所有类别包含 1 的所有记录进行排序。
所以如果排序是由 3 输出应该是
[
{
"id": 123,
"name": "Ram",
"status": 1,
"activity": "Poster Design",
"categories": [1, 2, 3, 4, 5]
},
{
"id": 126,
"name": "Leo",
"categories": [3],
"status": 1,
"activity": "Brochure"
},
{
"id": 124,
"name": "Leo",
"categories": [5],
"status": 1,
"activity": "Brochure"
},
{
"id": 134,
"name": "Levin",
"categories": [1],
"status": 1,
"activity": "3D Printing"
}
]
解决方案
按数组字段排序时,需要指定排序方式。
POST /_search
{
"sort": [{ "categories": { "order": "asc", "mode": "min" } }]
}
在您的情况下-它将1
对开头包含类别的文档进行排序。
更新
您可以完全避免排序并使用查询来提升具有特定值的值category_id
:
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"should": [
{
"term": {
"categories": {
"value": 3,
"boost": 2.0
}
}
}
]
}
}
}
must
part 将匹配所有文档,并且该子句将为其should
中的文档添加额外的提升,从而有效地将它们排名更高。3
categories
推荐阅读
- javascript - 在 for 循环 Javascript 中使用 p++ 和 ++p 之间的区别
- python - 使用项目中的包创建可执行的 Zip 档案
- assembly - 单周期 32 位 MIPS 处理器上的数据路径
- go - 从公钥/私钥装甲密钥中读取实体
- python - 如何将字典插入到mongodb的列表中?
- electron - 有没有其他方法可以关闭电子 5.0.1 中的无框窗口
- javascript - 无法在页面上放置边框
- rust - 在作为可变借用一部分的闭包内处理不可变借用
- javascript - Javascript - 如何通过数组所有元素的乘法返回正确的值?
- python - 如何计算机器学习模型进行分类的时间?