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

时间:2017-02-14 05:18:46

标签: elasticsearch elastic-stack

我有以下情况:

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

  • 指数-2016年4月10日
  • 指数-2016年4月11日
  • 指数-2016年4月12日
  • 指数-2016年4月15日
  • 指数-2016年4月16日
  • 指数-2016年4月18日

现在假设,我想在日期之间的弹性搜索中搜索一些数据 - 2016.04.11到2016.04.16。 我的问题是:

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

  2. 如果没有,那么我们如何优化搜索查询?如果我们需要搜索某些索引范围内的数据?

  3. Java实现。

  4. 请帮助..

2 个答案:

答案 0 :(得分:0)

我看到两个选项。

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

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个索引。这个月的最后一天再次重新索引到月度指数。

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

答案 1 :(得分:0)