我有以下情况:
我在弹性搜索中有以下索引。
现在假设,我想在日期之间的弹性搜索中搜索一些数据 - 2016.04.11到2016.04.16。 我的问题是:
我们有办法运行单个查询并定义一些过滤器参数,以便只在这两个日期之间的索引中进行搜索吗?
如果没有,那么我们如何优化搜索查询?如果我们需要搜索某些索引范围内的数据?
Java实现。
请帮助..
答案 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)