我有以下场景:
我在 Elasticsearch 中有以下索引。
- index-2016.04.10
- index-2016.04.11
- index-2016.04.12
- index-2016.04.15
- index-2016.04.16
- index-2016.04.18
现在假设,我想在 elastic search 中搜索 2016.04.11 到 2016.04.16 之间的一些数据。 我的问题是:
我们是否有办法运行单个查询并定义一些过滤器参数,以便搜索仅在这两个日期之间的索引中发生?
如果不是,那么如果我们需要在某个索引范围内搜索数据,那么我们如何优化搜索查询?
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 个索引。再次在本月的最后一天重新索引为月度索引。
在查询中,您可以通过提供要搜索的索引和查询过滤器来组合多种方法。
关于elasticsearch - 对具有一定日期范围的索引进行 Elasticsearch 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42218416/