elasticsearch - Elasticsearch- bool 过滤器:日期范围或字段可以为空

标签 elasticsearch

我正在尝试在ElasticSearch中创建一个 bool过滤器,以检查与今天相比的start_dateend_date。如果start_dateend_date为null,则仍应返回结果。

例如,今天是2016-08-09。

  • 项目1 :开始日期:2016-08-04结束日期:2016-08-08不应返回
  • 项目2 :开始日期:2016-08-08结束日期:2016-08-12应该返回
  • 项目3 :开始日期:null结束日期:null应当返回

  • 似乎无法使其与我当前的代码配合使用:
    POST _search
    {
    "query":{
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter" : {
                "bool": {
                    "must": [{
                        "range": {
                            "start_date": {"lte": "2016-08-09"}         
                        }
                    },
                    {
                        "range": {
                            "end_date": {"gte": "2016-08-09"}     
                        }
                    }],
                    "should": [{
                        "missing": {
                            "field": "start_date"         
                        }
                    },
                    {
                        "missing": {
                            "field": "end_date"      
                        }
                    }]
                }
            }
        }
    }
    }
    

    最佳答案

    您可能需要这样的东西,即:

  • start_date必须为null或在今天之前
  • end_date必须为null或在今天之后

  • 修改后的查询:
    POST _search
    {
      "query": {
        "filtered": {
          "filter": {
            "bool": {
              "must": [
                {
                  "bool": {
                    "should": [
                      {
                        "range": {
                          "start_date": {
                            "lte": "now"
                          }
                        }
                      },
                      {
                        "missing": {
                          "field": "start_date"
                        }
                      }
                    ]
                  }
                },
                {
                  "bool": {
                    "should": [
                      {
                        "range": {
                          "end_date": {
                            "gte": "now"
                          }
                        }
                      },
                      {
                        "missing": {
                          "field": "end_date"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    关于elasticsearch - Elasticsearch- bool 过滤器:日期范围或字段可以为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38844444/

    相关文章:

    elasticsearch - 使用 golang 包 'elastic' 中的 BulkIndexRequest

    ElasticSearch 在多索引、多类型搜索时返回 404

    json - Elasticsearch 如何索引嵌套列表

    java - Elasticsearch与JAVA的嵌套聚合

    java - 使用高级搜索运算符使用 Restful API 向搜索引擎发送查询

    elasticsearch - 如何安全地将Elasticsearch索引移动到Linux中的另一个装载?

    Elasticsearch 使用带同义词的 shingle 过滤器

    docker - LogStash 无法从许可证中检索许可证信息。响应代码 '401' 通过 URL 'http://elasticsearch:9200/_xpack' 联系 Elasticsearch

    json - 在 Elastic Search 中同步 JSON 数据

    elasticsearch - 嵌入式Elasticsearch-第二次启动需要很长时间