Можно ли установить предел отображения полей в elastic на 50 кб?

#elasticsearch #elastic-stack

#elasticsearch #elastic-stack

Вопрос:

Мое приложение представляет собой приложение для создания опросов, в котором пользователь может создавать опросы с множеством вопросов разных типов. Затем каждый опрос может быть передан любому количеству людей, чьи ответы записаны, как показано ниже … 1 ответ выглядит примерно так:

 {
          "id" : 256,                                        // submission id
          "timeTaken" : "39.00",
          "startTime" : "2020-07-19T05:37:38.873Z",
          "state" : "COMPLETED",
          "completedTime" : "2020-07-19T05:38:17.873Z",
          "deviceType" : "COMPUTER",
          "ip" : null,
          "account_id" : 2,
          "channel_id" : 48,
          "contact_id" : null,
          "survey_id" : 10,
          "trigger_id" : 93,
          "trigger_contact_id" : null,
          "locked" : false,
          "location" : null,
          "language" : null,
          "submission_id" : 256,
          "question_90" : {
            "skipped" : false,
            "answer_choices" : [ 79 ]
          },
          "question_122" : {
            "skipped" : false,
            "otherChoice" : null,
            "answer_choices" : [ 115, 113, 111, 110, 114 ]
          },
          "question_106" : {
            "skipped" : false,
            "answer_choices" : [ 85 ]
          },
          "question_120" : {
            "answer_txt": "Great service",
            "skipped" : false
          },
          "question_118" : {
            "answer_txt": "Hello people",
            "skipped" : false
          },
          "question_121" : {
            "skipped" : false,
            "answer_date" : "2020-06-04T20:01:49.783Z",
            "answer_timezone" : 330
          },
          "question_108" : {
            "skipped" : false,
            "answer_int" : "93"
          },
          "question_105" : {
            "skipped" : false,
            "answer_string" : " 1 202 9932219"
          },
          "question_93" : {
            "skipped" : false,
            "answer_string" : "Kyra60@yahoo.com"
          },
          "question_117" : {
            "skipped" : false
          },
          "question_92" : {
            "skipped" : false,
            "answer_txt" : "composite"
          },
          "question_107" : {
            "skipped" : false,
            "answer_bool" : true
          },
      }
  

Мне нужно все поле здесь для анализа и запросов.
Но в большинстве случаев ограничение поля документа превышает ограничение по умолчанию для elasticsearch, равное 1000.
Я почти уверен, что его производительность составляет 1000, но как я могу выполнить это и вставить документ, который может содержать более 20 тыс. полей.

Есть идеи по этому поводу?

Ответ №1:

Вы определенно не должны идти в направлении взрыва сопоставления. ключи хранятся в памяти, поэтому у вас будет чрезмерное потребление оперативной памяти и низкая производительность. У вас это задокументировано здесь: elastic.co/blog/found-crash-elasticsearch#mapping-explosion

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

 "answers": [
          {
           "question_id": 122,
            "skipped" : false,
            "otherChoice" : null,
            "answer_choices" : [ 115, 113, 111, 110, 114 ]
          }
]
  

Комментарии:

1. опять же, но огромные записи во вложенных файлах приведут к значительному снижению производительности.. Я думаю, ему нужно подумать о лучшем дизайне

2. любые рекомендации по дизайну или лучшее представление о том, как мне следует двигаться вперед 😔

3. @Jaycreation очень хороший документ

4. @ElasticsearchNinja Какие-либо рекомендации по дизайну или какие-либо моменты, которые могут помочь мне решить эту проблему?

5. 1) Полей 50 КБ, безусловно, все еще слишком много, но это сообщение в блоге от 2014 года, и с тех пор многое изменилось (разреженность больше не вызывает такой большой нагрузки на диск, больше структур данных вне кучи). 2) В зависимости от того, как вы хотите использовать эти поля, хорошим решением может быть новый тип сплющенного поля.