当前位置: 首页 > 面试题库 >

Elasticsearch日期范围查询,使用两个字段

谷梁子昂
2023-03-14
问题内容

我存储的文档包含两个字段,即startDate和endDate。我想使用输入日期运行Elastic查询,并返回其startDate和endDate包含该日期的所有文档。例如,

doc1:
"_source": {
     "startDate": "2015-01-01",
     "endDate": "2015-01-10"
}

如果我输入的日期为2015-01-02,则此文档应出现在结果中,因为输入的日期在开始日期和结束日期字段的范围内。

我可以使用一个字段进行范围查询,但由于范围仅接受一个,因此我不知道如何使用两个日期字段:

{
    "query": {
        "range" : {
            "startDate" : {
                "lte": "2015-01-02"
            }
        }
    }
}

我还需要在同一日期执行将“ endDate”设置为“ gte”的范围查询。那将确定我需要检查的时间范围。任何意见,将不胜感激。

编辑:我最终想使用Olivere的弹性库将其转换为Go中的Elasticsearch查询。


问题答案:

您可以使用filter子句执行此操作:

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "startDate": {
              "lte": "<startDate>"
            }
          }
        },
        {
          "range": {
            "endDate": {
              "gte": "<endDate>"
            }
          }
        }
      ]
    }
  }
}


 类似资料:
  • 问题内容: 嗨,我有供cpu使用的文档,其中包含date_time字段。现在,我想查找日期范围内的avg cpu用法。我想出了以下解决方案。如果我是Elastic Search的新手,请告诉我是否有任何先进或更好的方法。 现在,上面的查询返回我期望的文档,该文档在/日期范围内。现在,我要做的是,使用这些文档找到所有唯一的日期,并将这些唯一的日期组合存储在中,然后针对其中的所有项目执行以下查询 现在

  • 目前,我已经知道如何从(时间戳)日期字段中筛选日期范围。这是一个简单的问题: 但是,当你对基于时间的范围感兴趣时,如何过滤日期,比如gte:“8:00:00”和lte:“10:00:00”?这有可能吗? 换句话说,我的要求是:如何让所有事件在本月(15-11-01/15-11-30)发生,但只能在上午8:00到10:00之间发生?

  • 我的文档中有一个日期范围(使用日期对象)如下所示 我试图弄清楚如何构建一个查询来返回包含特定日期的所有事件,例如,像.... 如果查询显示类似这样的内容,但在Firestore查询限制下可能不可能出现这种情况。 因此,我一直在挠头几个小时,要么为此构建一个查询,要么以某种方式结构我的数据,以允许这样做。 这有可能吗?

  • 我需要帮助查询与日期范围的长收集。请参阅下面的示例文档。我想用日期范围查询startTime字段。

  • 问题内容: 我的问题类似于以下问题: http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::P11_QUESTION_ID:14582643282111 区别在于我的内部查询返回两条记录,而我有外部查询。 我需要编写类似这样的内部查询,这将为我提供两个日期范围之间的日期列表(我正在尝试不执行此查询)。 我的内部查询返回以下2行: 所以我需要内部查

  • 我在Elasticsearch中存储了一个日志文件,其中一个文档是文件的单行。消息块以某些关键字开始和结束。我想获取包含这些关键字的文档之间的所有文档。有没有办法利用Elasticsearch中的范围查询/范围过滤器来查询文本字段? 示例日志文件: 。。 我想查询“关键字1”和“关键字2”之间的所有文档,包括包含关键字本身的文档。假设有多个这样的块具有“关键字1”和“关键字2”。 此外,我正在用一