请教一个ES查询的写法?

我的搜索条件:

item_code = "ZJDL_013" 
&& "effective_flag" = 1 
&& "delete_flag" = 0 
&& (start_time == null || start_time <= '2023-02-08') 
&& (end_time == null || end_time <= '2023-02-08')

我的ES查询条件

GET index_three_catalogues/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "item_code.keyword": "ZJDL_013"
          }
        },
        {
          "match": {
            "effective_flag": 1
          }
        },
        {
          "match": {
            "delete_flag": 0
          }
        },
        {
          "bool": {
            "should": [
              {
                "exists": {
                  "field": "start_time"
                }, 
                
                "range": {
                  "start_time": {
                    "lte": "2023-02-08",
                    "format": "yyyy-MM-dd"
                  }
                }
              },
              {
                "exists": {
                  "field": "start_time"
                }, 
                "range": {
                  "start_time": {
                    "gte": "2023-02-08",
                    "format": "yyyy-MM-dd"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

但是一直报错,好像是语法组织得不对,请教这块带的逻辑条件怎么写。

阅读 1.5k
1 个回答

仔细一些,你的 rangeexists 成组合了。

下面就是你要的组合方式。

GET index_three_catalogues/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "item_code.keyword": "ZJDL_013"
          }
        },
        {
          "match": {
            "effective_flag": 1
          }
        },
        {
          "match": {
            "delete_flag": 0
          }
        },
        {
          "bool": {
            "should": [
              {
                "exists": {
                  "field": "start_time"
                }
              },
              {
                "range": {
                  "start_time": {
                    "lte": "2023-02-08",
                    "format": "yyyy-MM-dd"
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "exists": {
                  "field": "start_time"
                }
              },
              {
                "range": {
                  "start_time": {
                    "gte": "2023-02-08",
                    "format": "yyyy-MM-dd"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏