我有以下情况:
我在弹性搜索中具有以下索引。
现在,我想在日期-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个索引。再次在该月的最后一天重新索引到月度索引。
在查询中,您通过提供要搜索的索引和查询过滤器来组合多种方法。