【问题标题】:Elasticsearch range query with multiple condition具有多个条件的 Elasticsearch 范围查询
【发布时间】:2020-11-23 18:21:45
【问题描述】:

我必须根据更新和创建日期从 Elastic Search 中获取记录。我有这两个字段 updatedDate 和 createdDate 条件应该是:

  1. 获取过去 3 年范围内更新日期的记录。
  2. 如果 updatedDate 为 null,则获取过去 3 年范围内 createdDate 的记录。

我已经在 java 中编写了查询,用于根据记录 createdDate 获取记录:

.must(QueryBuilders.rangeQuery("createdDate").from(startDate,true).to(endDate,true));

startDate 和 endDate 保存日期范围。

我是 Elastic Search 的新手,不知道如何实现上述条件。

【问题讨论】:

  • 最好以 JSON 格式共享索引映射、示例和预期文档,以便我们提供可行的解决方案

标签: spring-boot elasticsearch java-8


【解决方案1】:

由于您没有提供任何索引数据,因此添加一个包含示例索引数据、映射、搜索查询和搜索结果的工作示例,以满足您的用例所需的所有条件。

索引映射:

{
  "mappings": {
    "properties": {
      "createdDate": {
        "format": "yyyy-MM-dd'T'HH:mm:ss'Z'",
        "type": "date"
      },
      "updatedDate": {
        "format": "yyyy-MM-dd'T'HH:mm:ss'Z'",
        "type": "date"
      }
    }
  }
}

索引数据:

{
    "createdDate": "2020-08-15T00:00:00Z"  
}
{
    "createdDate": "2019-08-15T00:00:00Z"  
}
{
    "createdDate": "2010-08-15T00:00:00Z"  
}
{
    "updatedDate": "2021-08-15T00:00:00Z",
    "createdDate": "2002-08-15T00:00:00Z"
}
{
    "updatedDate": "2018-08-15T00:00:00Z",
    "createdDate": "2020-09-15T00:00:00Z"
}
{
    "updatedDate": "2000-08-15T00:00:00Z",
    "createdDate": "2020-09-15T00:00:00Z"
}

搜索查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "bool": {
                  "filter": {
                    "range": {
                      "createdDate": {
                        "gte": "now-3y",
                        "lte": "now"
                      }
                    }
                  },
                  "must_not": {
                    "exists": {
                      "field": "updatedDate"
                    }
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "filter": {
              "range": {
                "updatedDate": {
                  "gte": "now-3y",
                  "lte": "now"
                }
              }
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "64965551",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.0,
        "_source": {
          "createdDate": "2020-08-15T00:00:00Z"
        }
      },
      {
        "_index": "64965551",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.0,
        "_source": {
          "createdDate": "2019-08-15T00:00:00Z"
        }
      },
      {
        "_index": "64965551",
        "_type": "_doc",
        "_id": "5",
        "_score": 0.0,
        "_source": {
          "updatedDate": "2018-08-15T00:00:00Z",
          "createdDate": "2020-09-15T00:00:00Z"
        }
      }
    ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多