如何在elasticsearch中比较同一文档中的两个日期字段
How to compare two date fields in same document in elasticsearch
在我的弹性搜索索引中,每个文档都有两个日期字段 createdDate
和 modifiedDate
。我正在尝试在 kibana 中添加过滤器以获取 modifiedDate
大于 createdDate
的文档。如何在 kibana 中创建此过滤器?
尝试使用下面的查询而不是大于它被认为是 gte 并获取所有记录
GET index/_search
{
"query": {
"bool": {
"filter": {
"script": {
"script" : {
"inline" : "doc['modifiedTime'].value.getMillis() > doc['createdTime'].value.getMillis()",
"lang" : "painless"
}
}
}
}
}
}
有几个选项。
选项 A: 最简单和最高效的方法是将两个字段的差异存储在文档的新字段中,例如
{
"createDate": "2022-01-11T12:34:56Z",
"modifiedDate": "2022-01-11T12:34:56Z",
"diffMillis": 0
}
{
"createDate": "2022-01-11T12:34:56Z",
"modifiedDate": "2022-01-11T12:35:58",
"diffMillis": 62000
}
然后,在 Kibana 中,您可以查询 diffMillis > 0
并找出所有在创建后被修改的文档。
选项 B: 您可以使用 script
query
GET index/_search
{
"query": {
"bool": {
"filter": {
"script": {
"script": """
return doc['createdDate'].value.millis < doc['modifiedDate'].value.millis;
"""
}
}
}
}
}
注意:根据您拥有的数据量,此选项可能会产生灾难性的性能,因为它需要对您的所有文档进行评估。
选项 C: 如果您使用的是 ES 7.11+,则可以使用 runtime fields directly from the Kibana Discover view.
您可以使用以下脚本将新的运行时字段(例如将其命名为 diffMillis
)添加到您的索引模式:
emit(doc['modifiedDate'].value.millis - doc['createdDate'].value.millis)
然后您可以将以下查询添加到您的搜索栏中
diffMillis > 0
在我的弹性搜索索引中,每个文档都有两个日期字段 createdDate
和 modifiedDate
。我正在尝试在 kibana 中添加过滤器以获取 modifiedDate
大于 createdDate
的文档。如何在 kibana 中创建此过滤器?
尝试使用下面的查询而不是大于它被认为是 gte 并获取所有记录
GET index/_search
{
"query": {
"bool": {
"filter": {
"script": {
"script" : {
"inline" : "doc['modifiedTime'].value.getMillis() > doc['createdTime'].value.getMillis()",
"lang" : "painless"
}
}
}
}
}
}
有几个选项。
选项 A: 最简单和最高效的方法是将两个字段的差异存储在文档的新字段中,例如
{
"createDate": "2022-01-11T12:34:56Z",
"modifiedDate": "2022-01-11T12:34:56Z",
"diffMillis": 0
}
{
"createDate": "2022-01-11T12:34:56Z",
"modifiedDate": "2022-01-11T12:35:58",
"diffMillis": 62000
}
然后,在 Kibana 中,您可以查询 diffMillis > 0
并找出所有在创建后被修改的文档。
选项 B: 您可以使用 script
query
GET index/_search
{
"query": {
"bool": {
"filter": {
"script": {
"script": """
return doc['createdDate'].value.millis < doc['modifiedDate'].value.millis;
"""
}
}
}
}
}
注意:根据您拥有的数据量,此选项可能会产生灾难性的性能,因为它需要对您的所有文档进行评估。
选项 C: 如果您使用的是 ES 7.11+,则可以使用 runtime fields directly from the Kibana Discover view.
您可以使用以下脚本将新的运行时字段(例如将其命名为 diffMillis
)添加到您的索引模式:
emit(doc['modifiedDate'].value.millis - doc['createdDate'].value.millis)
然后您可以将以下查询添加到您的搜索栏中
diffMillis > 0