elasticsearch - 如何在elasticsearch中查询数组内的空日期?
问题描述
在弹性搜索查询中,我试图搜索具有一系列批准通知的 Document 对象。dateCompleted
当用日期填充时,通知被认为是完整的,当dateCompleted
不存在或存在时被认为是待处理的null
。如果文档不包含一系列批准通知,则它不在搜索范围内。
我知道放置null_value
字段dateCompleted
并将其设置为任意旧日期,但这对我来说似乎很骇人听闻。
我尝试使用 Bool 查询,must exist doc.approvalNotifications and must not exist doc.approvalNotifications.dateCompleted
但如果文档包含完整和待处理的approvalNotifications,则它不起作用。例如,它只返回下面 ID 为 2 的文档。我期待找到 ID 为 1 和 2 的文档。
如何使用 elasticsearch 查找待批准的通知?
PUT my_index/_mapping/文档
"properties" : {
"doc" : {
"properties" : {
"approvalNotifications" : {
"properties" : {
"approvalBatchId" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"approvalTransitionState" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"approvedByUser" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"dateCompleted" : {
"type" : "date"
}
}
}
}
}
}
文件:
{
"id": 1,
"status": "Pending Notifications",
"approvalNotifications": [
{
"approvalBatchId": "e6c39194-5475-4168-9729-8ddcf46cf9ab",
"dateCompleted": "2018-11-15T16:09:15.346+0000"
},
{
"approvalBatchId": "05eaeb5d-d802-4a28-b699-5e593a59d445",
}
]
}
{
"id": 2,
"status": "Pending Notifications",
"approvalNotifications": [
{
"approvalBatchId": "e6c39194-5475-4168-9729-8ddcf46cf9ab",
}
]
}
{
"id": 3,
"status": "Complete",
"approvalNotifications": [
{
"approvalBatchId": "e6c39194-5475-4168-9729-8ddcf46cf9ab",
"dateCompleted": "2018-11-15T16:09:15.346+0000"
},
{
"approvalBatchId": "05eaeb5d-d802-4a28-b699-5e593a59d445",
"dateCompleted": "2018-11-16T16:09:15.346+0000"
}
]
}
{
"id": 4
"status": "No Notifications"
}
解决方案
您快到了,您可以通过使用字段的nested
数据类型来实现所需的行为"approvalNotifications"
。
发生的情况是 Elasticsearch 将您的approvalNotifications
对象展平,将它们的子字段视为原始文档的子字段。相反,该nested
字段将告诉 ES 将每个内部对象索引为隐式单独对象,尽管与原始对象相关。
要查询nested
对象,应该使用nested
query。
希望有帮助!
推荐阅读
- sql - 属于同一组但存储在两行中的值的差异
- angular - 将带有 system.js 的 Angular 4 迁移到 Angular 8 不起作用
- python - 当元组不可变时,如何附加到元组内的列表?
- html - 生成不必要的 html 标签 - Angular
- buffer-overflow - 缓冲区溢出漏洞利用中 shellcode 的可能位置
- ios - 禁用自动权限请求
- javascript - 用于圆环图的图表 js 在 HTML 页面上不起作用
- php - 如何执行从 url 提供参数的特定 php 脚本方法
- c# - 循环参考 Delphi vs C#
- python - 在 Python 中使用多处理的简单流程管理器