簡體   English   中英

如何比較 elasticsearch 中同一文檔中的兩個日期字段

[英]How to compare two date fields in same document in elasticsearch

在我的彈性搜索索引中,每個文檔都有兩個日期字段createdDatemodifiedDate 我正在嘗試在 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查詢

GET index/_search
{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": """
            return doc['createdDate'].value.millis < doc['modifiedDate'].value.millis;
          """
        }
      }
    }
  }
}

注意:根據您擁有的數據量,此選項可能會帶來災難性的性能,因為需要對您的所有文檔進行評估。

選項 C:如果您使用的是 ES 7.11+,則可以直接從Kibana Discover 視圖中使用運行時字段

您可以使用以下腳本向索引模式添加新的運行時字段(例如,將其命名為diffMillis ):

emit(doc['modifiedDate'].value.millis - doc['createdDate'].value.millis)

然后您可以將以下查詢添加到您的搜索欄中

diffMillis > 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM