Почему я получаю количество сегментов, всегда равное указанному размеру в терминах агрегатов? - PullRequest
0 голосов
/ 20 апреля 2020

Я новичок ie в поиске по эластичности c, я использую агрегацию терминов, чтобы получать из индекса только уникальные документы, основанные на поле. Я указал максимальный размер уникальных документов в своем запросе, почему количество сегментов всегда равно размеру?

{
  "aggs": {
    "name": {
      "terms": {
        "field": "fieldname",
        "size": 10000
      }
    }
  }
}

Почему я получаю 10000 блоков, когда количество уникальных документов может быть меньше этого значения?

1 Ответ

0 голосов
/ 20 апреля 2020

10000 - верхний предел для количества документов, возвращаемых в запросе. Ваш индекс будет иметь более 10000 записей. Для получения действительного количества используйте значение счетчика api

GET index/_count

OR

{
  "size": 0, 
  "aggs": {
    "total_doc_count": {
      "value_count": {
        "field": "fieldname"
      }
    }
  }
}

Чтобы получить более 10000 документов в запросе, необходимо использовать scroll api .

POST /index-name/_search?scroll=1m --> scroll context
{
    "size": 10000,  --> will return docs in chunk of 10,000
    "query": {
        "match_all": {}
    }
}

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==" --> you will get from previous request
}

Если документов всего 100, условия агрегации вернут только 100, а не 10000

...