首页 > 解决方案 > 可以将弹性中的字段映射限制设置为 50k 吗?

问题描述

我的应用程序是一个调查创建应用程序,用户可以在其中创建包含许多不同类型问题的调查。然后可以将每个调查共享给任意数量的人,他们的回复记录如下...... 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
          },
      }

我需要这里的所有字段进行分析和查询。但大多数情况下,doc 字段限制超过了 elasticsearch 默认限制 1000。我很确定它的性能为 1000,但我如何才能尊重这一点并插入可能具有 20k + 字段的文档。

对此有何见解?

标签: elasticsearchelastic-stack

解决方案


你绝对不应该去映射爆炸方向。密钥存储在内存中,因此您将过度消耗 RAM 和性能不佳。你有它记录在这里:elastic.co/blog/found-crash-elasticsearch#mapping-explosion

通过使用嵌套数据类型,您可以轻松地用很少数量的键映射您的答案。

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

推荐阅读