elasticsearch - 在嵌套对象内查询和排序
问题描述
我正在尝试根据嵌套对象内的字段对搜索结果进行排序。嵌套对象的映射如下所示:
{
"metaDates": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"qualifiers": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "date",
"format": "date_optional_time"
}
}
}
}
因此,一个文档中可以有许多 metaDates 对象。这些通常如下所示:
{
"metaDates": [
{
"name": "create-time",
"value": "2020-06-03T13:14:11.556Z",
"qualifiers": [
"*"
]
},
{
"name": "update-time",
"value": "2020-06-03T13:14:11.556Z",
"qualifiers": [
"*"
]
}
]
}
我想要实现的是根据创建时间或更新时间对结果进行排序。上升和/或下降。
我不能让它充分发挥作用。就目前而言,我不能强制它只查看给定的日期,在我看来,因为它验证了所有 metaDates 值,而不仅仅是我在订购时感兴趣的那个。(设置排序模式会影响结果,这就是我认为是这种情况的原因)
样本数据:
{
"_index": "index-someitem-1630649750000",
"_type": "_doc",
"_id": "17",
"_score": null,
"_source": {
"id": 17,
"title": "test",
"metaTexts": [
{
"name": "title",
"value": "test",
"qualifiers": [
"en_US"
]
}
],
"metaDates": [
{
"name": "create-time",
"value": "2020-06-03T13:14:24.502Z",
"qualifiers": [
"*"
]
},
{
"name": "update-time",
"value": "2020-06-03T13:14:29.140Z",
"qualifiers": [
"*"
]
}
]
},
"sort": [
1591190064502
]
}
我希望根据创建时间或更新时间(嵌套对象内部)对生成的文档进行排序
任何帮助深表感谢!谢谢
解决方案
对于将来发现此问题的任何人:通过更改数据格式、从方程式中删除嵌套对象来解决此问题。这意味着灵活性稍差,但查询更容易。
推荐阅读
- git - 我可以在本地编辑 main.workflow github-actions 文件吗?
- excel - 将 2 列组合为唯一值以输出总和
- swift - 无法从 GoogleMaps 获取路线,因为“found nil”解开 URL
- c# - 如何将字符串数字拆分为单独的整数
- android - 无法使用设计库中的视图
- javascript - 根据过滤器输入过滤对象数组
- date - 将多个 GA 非抽样报表数据合并为一个数据集(查看)
- c# - 获取方法的所有派生方法
- php - 当 substr() 返回字符串时,strtotime() 函数工作不一致
- c# - Appium - 错误这个版本的 ChromeDriver 只支持 Chrome 版本 75,但我有 ChromeDriver 75