Elasticsearch 查询:对两个字段进行范围查询,但一个是可选字段

拉紧

我需要根据时间戳搜索我的索引。

文档具有以下字段组合:

  • 开始时间结束时间

或者

  • 只是START_TIME(无END_TIME字段)

伪查询:对于给定的时间戳,我希望返回 id 匹配的所有文档,并且:
timestamp >= start_time && timestamp < end_time

但如果没有 end_time 字段,则查询需要是这样的:
(not exists end_time) && (timestamp > start_time)

弹性查询这就是我要发疯的地方。我无法获得与上述伪查询等效的弹性查询。也许我以错误的方式接近它(完全有可能)。这是我所拥有的:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "id_s": "SomeIdValue"
          }
        },
        {
          "bool": {
            "should": [
              {
                "must": [
                  {
                    "must_not": [
                      {
                        "exists": {
                          "field": "end_time_dt"
                        }
                      }
                    ]
                  },
                  {
                    "range": {
                      "start_time_dt": {
                        "lte": "2019-07-12T03:20:22"
                      }
                    }
                  }
                ]
              },
              {
                "filter": [
                  {
                    "range": {
                      "start_time_dt": {
                        "lte": "2019-07-12T03:20:22"
                      }
                    }
                  },
                  {
                    "range": {
                      "end_time_dt": {
                        "gte": "2019-07-12T03:20:22"
                      }
                    }
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }
}

但这给了我 [must] query malformed, no start_object after query name

我如何构造这个查询?我在正确的轨道上吗?

提前致谢!

尼尚

您的查询在语法上是错误的。正确的查询是:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "id_s": "SomeIdValue"
          }
        },
        {
          "bool": {
            "should": [
              {
                "bool": {
                  "must_not": [
                    {
                      "exists": {
                        "field": "end_time_dt"
                      }
                    }
                  ],
                  "must": [
                    {
                      "range": {
                        "start_time_dt": {
                          "lte": "2019-07-12T03:20:22"
                        }
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "range": {
                        "start_time_dt": {
                          "lte": "2019-07-12T03:20:22"
                        }
                      }
                    },
                    {
                      "range": {
                        "end_time_dt": {
                          "gte": "2019-07-12T03:20:22"
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java API中进行Elasticsearch范围查询两个字段的总和?

来自分类Dev

两个字段上的elasticsearch复合查询

来自分类Dev

如何在ElasticSearch中查询一个数组中同一字段中的两个字段?

来自分类Dev

当有时仅出现其中一个字段时,对ElasticSearch中的两个字段进行过滤

来自分类Dev

Elasticsearch-配置,过滤器插件,将一个字段分成两个字段

来自分类Dev

elasticsearch匹配两个字段

来自分类Dev

Elasticsearch:当查询的语言未知或混合时,在两个字段中提供多种语言

来自分类Dev

Elasticsearch通过两个字段之一进行匹配

来自分类Dev

在Elasticsearch中查询一个字段不等于另一个字段

来自分类Dev

elasticsearch 中的可选字段

来自分类Dev

Elasticsearch:在两个字段上聚合

来自分类Dev

Elasticsearch匹配两个字段的组合

来自分类Dev

在Elasticsearch中使用两个不同的字段进行搜索查询

来自分类Dev

搜索两个字段,但在Elasticsearch中仅得分一次

来自分类Dev

对具有多个值的字段进行Elasticsearch查询,一个匹配项得分相等

来自分类Dev

在Elasticsearch中处理可选字段搜索

来自分类Dev

如何在elasticsearch中同时在嵌套字段中搜索单个对象的两个字段

来自分类Dev

Elasticsearch子字段查询

来自分类Dev

Elasticsearch查询的子字段

来自分类Dev

Elasticsearch子字段查询

来自分类Dev

Elasticsearch 多字段 OR 查询

来自分类Dev

比较2个字段的elasticsearch查询(使用java)

来自分类Dev

查询两个字段,一个嵌套,一个在根上

来自分类Dev

ElasticSearch词组前缀查询多个字段

来自分类Dev

elasticsearch动态查询-向返回的每个文档中添加另一个字段

来自分类Dev

Elasticsearch时间字段和范围查询

来自分类Dev

范围查询不支持 Elasticsearch 字段

来自分类Dev

是否可以按给定表中的两个字段进行排序,一个是升序,另一个是降序?

来自分类Dev

Elasticsearch针对两个字段的两组术语

Related 相关文章

  1. 1

    如何在Java API中进行Elasticsearch范围查询两个字段的总和?

  2. 2

    两个字段上的elasticsearch复合查询

  3. 3

    如何在ElasticSearch中查询一个数组中同一字段中的两个字段?

  4. 4

    当有时仅出现其中一个字段时,对ElasticSearch中的两个字段进行过滤

  5. 5

    Elasticsearch-配置,过滤器插件,将一个字段分成两个字段

  6. 6

    elasticsearch匹配两个字段

  7. 7

    Elasticsearch:当查询的语言未知或混合时,在两个字段中提供多种语言

  8. 8

    Elasticsearch通过两个字段之一进行匹配

  9. 9

    在Elasticsearch中查询一个字段不等于另一个字段

  10. 10

    elasticsearch 中的可选字段

  11. 11

    Elasticsearch:在两个字段上聚合

  12. 12

    Elasticsearch匹配两个字段的组合

  13. 13

    在Elasticsearch中使用两个不同的字段进行搜索查询

  14. 14

    搜索两个字段,但在Elasticsearch中仅得分一次

  15. 15

    对具有多个值的字段进行Elasticsearch查询,一个匹配项得分相等

  16. 16

    在Elasticsearch中处理可选字段搜索

  17. 17

    如何在elasticsearch中同时在嵌套字段中搜索单个对象的两个字段

  18. 18

    Elasticsearch子字段查询

  19. 19

    Elasticsearch查询的子字段

  20. 20

    Elasticsearch子字段查询

  21. 21

    Elasticsearch 多字段 OR 查询

  22. 22

    比较2个字段的elasticsearch查询(使用java)

  23. 23

    查询两个字段,一个嵌套,一个在根上

  24. 24

    ElasticSearch词组前缀查询多个字段

  25. 25

    elasticsearch动态查询-向返回的每个文档中添加另一个字段

  26. 26

    Elasticsearch时间字段和范围查询

  27. 27

    范围查询不支持 Elasticsearch 字段

  28. 28

    是否可以按给定表中的两个字段进行排序,一个是升序,另一个是降序?

  29. 29

    Elasticsearch针对两个字段的两组术语

热门标签

归档