2017-08-26 21 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

私はあなたの2番目の解決策は利点がないと思います。私は配列としてオプションを格納するだけです:

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

ありがとう。私はこれらの2つのソリューションの間で切り替えており、どちらを決定することができませんでした。私は真剣にあなたの提案を検討しています。しかし、一部のフィールドでは順序も重要なので、配列の代わりに文字列を格納することを選択します。余分なディスクスペースは、私の2番目のソリューションと直接比較してストリングを格納する唯一の欠点ですか? – RedGiant

+2

@ RededGiantはいソースドキュメント(elasticsearchに送信したドキュメント)はディスクに保存されますが、これを無効にするか圧縮を有効にすることができます。だから私は99%のユースケースは本当に問題ないと思う。順序が重要な場合は、私の配列が動作していないはずです、私はテキストフィールドが解決できると思います。 – MartinSchulze

関連する問題