对具有一定日期范围的索引进行弹性搜索查询

Elastic search query on indices with some date range

我有以下情况:

我在弹性搜索中有以下索引。

现在假设,我想在 elastic search 中搜索 2016.04.11 到 2016.04.16 之间的一些数据。 我的问题是:

  1. 我们有什么方法可以 运行 单个查询并定义一些过滤器参数,以便只在这两个日期之间的索引中进行搜索吗?

  2. 如果不是,那么我们如何优化搜索查询如果我们需要在某个索引范围内搜索数据?

  3. Java实施。

请帮忙..

我看到两个选项。

您在搜索时指定索引,例如

GET /index-2016.04.10,index-2016.04.11,index-2016.04.12/_search?ignore_unavailable=true
{
    "query": {
        yourquery
    }
}

或在查询中过滤(但这种方法可能很慢,并且取决于索引的数量可能会抛出分片异常,因为您将查询所有匹配模式的索引)

GET /index-*/_search
{
    "query": {
        "terms" : {
            "_index" : ["index1", "index2"]
        }
    }
}

我假设您会像过去 7、14、30 天那样为过去的数据编制索引:所以在这种情况下,我肯定会采用第一种方法,在您的应用程序中进行索引名称计算

更新 1:为防止不存在的指标出错,您可以设置标志 ignore_unavailable

更新 2: 好吧,我需要在过去进行搜索,其中一个解决方案可能是进行聚合工作。

在 ES 中有 reindex api

POST _reindex
{
  "source": {
    "index": ["twitter", "blog"]
  },
  "dest": {
    "index": "all_together"
  }
}

您将拥有最多 7 天的每日索引。然后在星期一 0:0 您将数据汇总到每周索引。

您每周最多有 5 个索引。再次在一个月的最后一天重新索引到月度索引。

在查询中,您可以通过提供要搜索的索引和查询过滤器来组合多种方法。

您可以使用别名,然后像索引一样查询到别名。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-add-alias.html#indices-add-alias