如何为我的应用程序设计弹性索引?

li9yvcax  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(360)

我的应用程序是一个调查创建应用程序,用户可以创建许多不同类型的问题调查。每个调查都可以分享给任何数量的人,他们的回答记录如下。。。

{
          "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
          },
      }

最初我为每个调查创建了一个索引,但结果证明这是一个坏主意,因为每个索引分配了5个碎片,我的应用程序有近2万个用户创建的调查。amazon elastic服务出现故障,在我的2个节点中创建了6万个碎片。。
在这种困境中,我不知道如何创建索引,也不知道如何对索引进行有意义的分区,以便在后期进行高效查询。
有谁能分享一些见解,问我更多的问题,这样我就可以更新问题的清晰度?

goqiplq2

goqiplq21#

看起来您使用的elasticsearch版本<7.x,其中默认的主碎片数为5,更改为1,其中一个原因是您的问题是有许多较小的碎片,这会影响elasticsearch的性能。
理想情况下,您应该为所有调查创建一个索引,并基于时间范围或大小,您可以滚动到一个新索引。
你需要有 survey_id (调查的唯一标识)在单个索引中进行查询时,请使用 survey_id 在过滤器上下文中,以获得更好的查询性能,因为过滤器上下文在默认情况下是缓存的。

相关问题