elasticsearch Elasticsearch聚合范围问题
我有一个Elasticsearch索引,有超过1亿条记录 如果我在下面运行查询,则响应(1条记录)将在1秒内出现
elasticsearch Elasticsearch聚合范围问题,
elasticsearch,
elasticsearch,我有一个Elasticsearch索引,有超过1亿条记录 如果我在下面运行查询,则响应(1条记录)将在1秒内出现 { "query": { "bool": { "must":{ "term": { "_id": "a36403af960840b86452bf1a6bd42fde3b4773e0" } } }
{
"query": {
"bool": {
"must":{
"term": {
"_id": "a36403af960840b86452bf1a6bd42fde3b4773e0"
}
}
}
}
}
但如果我在下面运行查询,则响应将在2分钟后出现。
{
"query": {
"bool": {
"must":{
"term": {
"_id": "a36403af960840b86452bf1a6bd42fde3b4773e0"
}
}
}
},
"aggs": {
"mywordcloud": {
"terms": {
"field": "post.content_terms"
}
}
}
}
我不知道为什么在查询顶部添加聚合后要花费这么多时间,其中_id=a36403af960840b86452bf1a6bd42fde3b4773e0只与一条记录匹配
根据我的假设,弹性搜索是对数据的输出应用聚合。所以从技术上讲,它应该在1条记录上运行聚合,并且响应必须在1秒之内到达,这与不使用aggs的情况几乎相同
如何解决这个问题
我使用的是弹性搜索版本<强> 1.5
> P>这是一个很好的例子,你需要考虑选择<代码>过滤器>代码>上下文,而不是代码>查询< /COD>上下文。p> 尝试使用过滤器运行相同的查询,如下所示:
GET my-index/_search
{
"query": {
"bool": {
"filter":{
"term": {
"_id": "a36403af960840b86452bf1a6bd42fde3b4773e0"
}
}
}
},
"aggs": {
"mywordcloud": {
"terms": {
"field": "post.content_terms"
}
}
}
}
我的第一个建议
是否要升级:-
我在1.7.2中尝试了您的第二个查询,速度非常快。我认为升级肯定会解决你的问题
第二项建议
不确定它是否适用于弹性搜索1.5版
请尝试以下查询:-
{
"query": {
"constant_score": {
"filter":{
"term": {
"_id": "a36403af960840b86452bf1a6bd42fde3b4773e0"
}
}
}
},
"aggs": {
"mywordcloud": {
"terms": {
"field": "post.content_terms"
}
}
}
}
或
我知道这将提供不同的数据,但您可以使用此方法更改您的逻辑。为什么不升级到最新的5.3版本,它有很多改进,然后检查结果和响应时间。我计划升级,但不确定它是否会解决aggs范围问题。
{
"aggregations": {
"bylife": {
"terms": {
"field": "post.content_terms"
},
"aggregations": {
"bylife2": {
"filter": {
"term": {
"_id": "a36403af960840b86452bf1a6bd42fde3b4773e0"
}
}
}
}
}
}
}