如何增加agg结果列表的返回结果

时间:2019-06-04 08:11:28

标签: elasticsearch

我当前正在使用Elasticsearch 6.4。 我使用aggs查询结果。详细信息如下。 对于某些查询语句,我没有得到想要的东西,而错过了我想要的文档。弹性搜索似乎以某种上限返回,因此返回一些顶部,而不是整个部分。因此有时我会缺少搜索结果中想要的东西。我目前怀疑这种效果是否与doc_count_error_upper_bound密切相关。我的猜测对吗?然后,如何在聚合过程中减少doc_count_error_upper_bound和sum_other_doc_count以获得我想要的?有什么方法可以调整值?

    q = {
        "query": {
            "bool": {
                "must": {"query_string": {"default_field": "eLabel", "query": "Trump"}},
                "must_not": [],
                "should": []
            }
        },
        "size": 0,
        "_source": [
            "eid"
        ],
        "aggs": {
            "eids": {
                "terms": {
                    "field": "eid"
                }
            }
        }

结果示例

{
"took": 21,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1103,
"max_score": 0,
"hits": [ ]
},
"aggregations": {
"eids": {
"doc_count_error_upper_bound": 15,
"sum_other_doc_count": 840,
"buckets": [
{
"key": "Q8684",
"doc_count": 62
}
,
{
"key": "Q1062177",
"doc_count": 36
}
,
{
"key": "Q100852",
"doc_count": 25
}
,
{
"key": "Q17469",
"doc_count": 25
}
,
{
"key": "Q39913",
"doc_count": 24
}
,
{
"key": "Q20398",
"doc_count": 22
}
,
{
"key": "Q157169",
"doc_count": 20
}
,
{
"key": "Q36929",
"doc_count": 17
}
,
{
"key": "Q17503",
"doc_count": 16
}
,
{
"key": "Q45086",
"doc_count": 16
}
]
}
}
}

2 个答案:

答案 0 :(得分:1)

您只需要在聚合查询中添加size字段即可。默认值为10,这就是为什么它仅显示10个结果的原因。

此值越高,您看到的sum_other_doc_count值就越小。根据上面的链接,当有很多唯一的术语时,Elasticsearch只返回最重要的术语。此数字是不属于响应的所有存储桶的文档计数之和

{  
   q =   {  
      "query":{  
         "bool":{  
            "must":{  
               "query_string":{  
                  "default_field":"eLabel",
                  "query":"Trump"
               }
            },
            "must_not":[  

            ],
            "should":[  

            ]
         }
      },
      "size":0,
      "_source":[  
         "eid"
      ],
      "aggs":{  
         "eids":{  
            "terms":{  
               "field":"eid",
               "size":100,                            <---- Add this
               "show_term_doc_count_error": true      <---- Add this
            }
         }
      }
   }
}

请注意,文档数是根据here估算的。没有一种简单的方法可以知道哪些文档出错了,但是有一种方法可以知道对于哪些存储桶,使用"show_term_doc_count_error": true会发生该错误。您可以阅读有关此here的信息。

希望这会有所帮助!

答案 1 :(得分:1)

此处查询大小不适用于聚合,您必须在terms聚合中定义大小。

请找到以下查询以获得更多结果。

您可以在size中使用aggregation,但是在此处不能使用offset来检索数据,这意味着您只能更改限制。 假设您需要10个列表,之后需要下一个10个文档,则可以通过传递20号来获取下一个文档。

 {
    "query": {
        "bool": {
            "must": {"query_string": {"default_field": "eLabel", "query": "Trump"}},
            "must_not": [],
            "should": []
        }
    },
    "size": 0,
    "_source": [
        "eid"
    ],
    "aggs": {
        "eids": {
            "terms": {
                "field": "eid",
                "size": 20
            }
        }
    }

希望这对您有用。