2017-08-26 16 views
1

我无法决定将事件信息保存到elasticsearch的方法。信息存储在mysql中,因为我想让它们可过滤,所以我决定使用elasticsearch来索引事件。每个字段的选项数量有限,但允许有多个选项。我应该直接存储的信息是这样的:我是否应该直接在elasticsearch中存储字符串或其数字标记

{ 
    "id":"1", 
    "name":"Event A", 
    "type":"Training,Workshop,Meeting", 
    "industrialSector":"Energy,Transport", 
    "country":"China" 
    // + 80 fields alike 
} 

或者使用一些后台的工作保存到elasticsearch前关闭字符串值到数字标记:

{ 
    "id":"1", 
    "name":"Event A", 
    "type":"1 3 5", 
    "industrialSector":"2 3", 
    "country":"7" 
    // + 80 fields alike 
} 

将会有一个地图对象引用保存或取出后场之前选择:

let options = 
{ 
    type:{ 
     Training:1, 
     Fair:2 
     Workshop:3, 
     Brokerage:4 
     Meeting:5 
    }, 
    industrialSector:{ 
     Tech:1 
     Energy:2 
     Transport:3 
    } 
} 

第一个需要较少的工作,但它比第二个执行速度较慢,需要更多的diskspaces?

回答

2

我认为你的第二个解决方案没有好处。我只是将选项存储为一个数组:

{ 
    "id":"1", 
    "name":"Event A", 
    "type":["Training","Workshop","Meeting"] 
    "industrialSector":["Energy","Transport"] 
    "country":"China" 
    // + 80 fields alike 
} 
+0

谢谢。我一直在这两种解决方案之间切换,无法确定哪一种。我正在认真考虑你的建议。但是,顺序在一些领域也很重要,所以我会选择存储字符串而不是数组。与我的第二个解决方案相比,额外的磁盘空间是直接存储字符串的唯一缺点吗? – RedGiant

+2

@ RedGiant是源文档(您发送给elasticsearch的文档)将存储在磁盘上,您可以禁用该文档或启用压缩。所以我认为99%的用例确实没有问题。如果顺序很重要,我的数组应该不起作用,我认为文本字段可能是解决方案。 – MartinSchulze

相关问题