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

pba*_*pai 6 elasticsearch elastic-stack

我有以下场景:

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

  • 索引-2016.04.10
  • 索引-2016.04.11
  • 索引-2016.04.12
  • 索引-2016.04.15
  • 索引-2016.04.16
  • 索引-2016.04.18

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

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

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

  3. Java 实现。

请帮忙..

Vol*_*hat 0

我看到两个选择。

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

GET /index-2016.04.10,index-2016.04.11,index-2016.04.12/_search?ignore_unavailable=true
{
    "query": {
        yourquery
    }
}
Run Code Online (Sandbox Code Playgroud)

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

GET /index-*/_search
{
    "query": {
        "terms" : {
            "_index" : ["index1", "index2"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

更新1:为了防止不存在的索引出现错误,您可以设置标志ignore_unavailable

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

ES中有reindex api

POST _reindex
{
  "source": {
    "index": ["twitter", "blog"]
  },
  "dest": {
    "index": "all_together"
  }
}
Run Code Online (Sandbox Code Playgroud)

您将拥有长达 7 天的每日索引。然后在周一 0:0 将数据聚合到每周索引。

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

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