Как увеличить результат возврата для списка результатов agg - PullRequest
0 голосов
/ 04 июня 2019

В настоящее время я использую эластичный поиск 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 ]

1 голос
/ 04 июня 2019

Здесь размер запроса не работает для агрегации, вы должны определить размер внутри 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
            }
        }
    }

Надеюсь, это сработает для вас.

1 голос
/ 04 июня 2019

Вам просто нужно добавить поле 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
            }
         }
      }
   }
}

Обратите внимание, что количество документов является приблизительным, как указано здесь . Нет простого способа узнать, какие документы допущены с ошибкой, однако есть способ узнать, для каких сегментов ошибка произошла бы, используя "show_term_doc_count_error": true. Вы можете прочитать об этом здесь .

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...