Elasticsearch 查询以获取超过一小时前修改的项目

Posted

技术标签:

【中文标题】Elasticsearch 查询以获取超过一小时前修改的项目【英文标题】:Elasticsearch query to get items that were modified more then an hour ago 【发布时间】:2022-01-23 01:42:40 【问题描述】:

我在 elasticsearch 中有以下索引项。


 "_index": "test_index",
 "type": "_doc",
 "_source": 
   "someTitle": "Thank you for your help",
   "lastUpdated": 1640085989000
,

 "_index": "test_index",
 "type": "_doc",
 "_source": 
   "someTitle": "Thank you for your help",
   "lastUpdated": 1640092916012
  
,

 "_index": "test_index",
 "type": "_doc",
 "_source": 
   "someTitle": "Thank you for your help",
   "lastUpdated": 1640092916012
  


如何根据lastUpdated 值获取一个多小时前更新的项目?我一直在尝试一些在互联网上找到的解决方案,但其中大多数是用于查询字符串而不是数字字段。

【问题讨论】:

您想在一小时前更新项目?或者您想要在那之前或之后的物品? 嗨@TusharShahi,感谢您回来。我想要一个小时前更新的项目。换句话说,在过去 60 分钟内未更新的项目。谢谢 运行答案中的查询,但遗憾的是没有得到任何数据。 hits 以空数组的形式出现。 :( 请将您的映射添加到问题中。另外,[对答案发表评论 【参考方案1】:

感觉就像 range 查询可以完成工作 [doc]

您要查找的部分是range on dates

您的查询应该或多或少是这样的:

GET /<your index>/_search

  "query": 
    "range": 
      "lastUpdated": 
        "gte": "now-1h"
      
    
  

确保您的映射正确,并且lastUpdated 具有正确的格式[doc]。

【讨论】:

谢谢@Paulo。有用。显然有一些映射问题。 这可能很棘手☺️很高兴听到你去上班【参考方案2】:

ES 为您提供nowh 等关键字,用于简单的date math 查询。除了range query,您应该能够做到这一点:


  "query": 
    "range": 
      "lastUpdated": 
        "lt": "now-1h"
      
    
  

【讨论】:

谢谢@Tushar,但"lt": "now-1h" 因某种原因无法使用,但"gte": "now-1h" 可以使用 很高兴。在这种情况下,请投票并接受答案。

以上是关于Elasticsearch 查询以获取超过一小时前修改的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 postgresql 中进行查询,以查找所有启动时间超过 6 小时的记录?

当数据类型为 TIMESTAMP 和 TIMEZONE 时如何获取前一小时的值

如何在 Elasticsearch 中管理超过 10,000,000 个文档的索引以实现快速搜索?

elasticsearch查询模板

将多个单独的查询合并为一个以在Elasticsearch中获取聚合结果

Elasticsearch from+size 分页