2017-04-24 37 views
0

だが、私は以下のような文書を格納したいとしましょう:Elasticsearch - 列挙型のデータ型

{ 
    "item_id": 1, 
    "item_price": 500, 
    "currency": "USD" 
} 

私は通貨フィールドはENUMのようになりたいので、私は次のように、値のセットを事前定義することができます:「USD」 、「GBP」、「EUR」のように...

は、私はまた、ハッシュマップのように、それぞれの値が整数に関連されることを希望するので、値のセットは次のようになります。

{ "USD":1, "GBP":2, "EUR":3 } 

どのようにシェルこのフィールドをマップしますか?

答えて

2

あなたの索引コードで、あなたの列挙型を宣言する必要があり、あなたの文書は、このように非正規化する必要があります:データ型については

{ 
    "item_id": 1, 
    "item_price": 500, 
    "currency": "USD", 
    "currency_id": 1 
} 

、私はkeywordcurrency_idフィールドとしてcurrencyフィールドを宣言することをお勧めbyteまたはshortを追跡する必要がある通貨の数によって異なります。

+0

よろしくお願いいたします。しかし、私は事前に通貨(文字列)のセットを定義することができますので、セットにない間違った通貨(例えば "USF")を入力するとelasticsearchは私の間違いを認識しますか?もう1つは、私が間違ってID "2"の "USD"を入力することができます。 – TVC

+0

ESには型指定システムがあり、マッピングの種類を定義することはできますが、説明している種類のチェックは行いません。インデックス作成のコードが健全で一貫性のあるものであることを確認することは、あなた次第です。 unit-test it ;-) – Val

+0

OK、このフィールドを 'string'型の代わりに' keyword'型にする利点は何ですか? – TVC