我应该直接存储字符串还是在elasticsearch中存储数字标记

时间:2017-08-26 05:40:34

标签: elasticsearch lucene elasticsearch-5

我无法决定将事件信息保存到elasticsearch的方法。信息存储在mysql中,因为我想让它们可过滤,所以我决定使用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
    }
}

第一个需要的工作量较少,但是它的执行速度较慢,需要的磁盘空间多于第二个磁盘空间吗?

1 个答案:

答案 0 :(得分:2)

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

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