Любой эффективный способ получить уникальные условия из индекса Elasticsearch

Я стремлюсь хранить все уникальные термины вместе с их хэшами md5 в базе данных. У меня есть 1 миллион документов с индексом ~400000 уникальных терминов. Я получил эту цифру от использования aggregations в эластичном поиске.

GET /dt_index/document/_search
{
  "aggregations": {
    "my_agg": {
      "cardinality": {
        "field": "text"
      }
    }
  }
}

Я могу получить уникальные условия, используя следующие:

GET /dt_matrix/document/_search
{
  "aggregations": {
    "my_agg": {
      "term": {
        "field": "text",
        "size": 100
      }
    }
  }
}

Это дает мне 10 результатов поиска вместе с объединением терминов из 100 уникальных терминов. Но для получения JSON из ~400000 терминов потребуется память. Так же, как для анализа всех результатов поиска, которые мы можем использовать scan-scroll, Можно ли как-то разобрать все уникальные термины, не загружая все в память?

2 ответа

Хотя вы не можете прокручивать агрегаты, вы можете получить меньшие, более управляемые подмножества памяти, добавив к вашему запросу запроса. Например, вы можете запросить все уникальные термины, начинающиеся с буквы А, и так далее. Корректируйте свой запрос, пока не будете удовлетворены размером самого большого подмножества.

Вы не можете сканировать прокрутить результаты агрегации. Скорее, вы должны индексировать эти уникальные термины в отдельный индекс или тип при индексации, а затем выполнять обычную нумерацию страниц над ним.

Другие вопросы по тегам