連結
あなたの質問の最初の部分について: さまざまなフィールドを連結して、すべての情報を含むフィールドにするつもりはありません。複数のフィールドがあると、それらのフィールドでファセットと集計を計算できるという利点があります。たとえば、特定の都市の顧客数や特定の郵便番号を持つ顧客の数などです。一致クエリまたは複数一致クエリを使用して、さまざまなフィールドからの情報を照会できます。
情報を別々のフィールドに入れることに加えて、分析済み部分と分析済みでない部分 (fieldname.raw) を含むマルチフィールドを使用します。これにより、集計、ファセット、および並べ替えが可能になります。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/mapping-multi-field-type.html
「ニューヨーク」を考えてみてください。分析すると、['New', 'York'] として保存され、'New York' のすべての人を見ることができなくなります。あなたが見るのは、「New」と「York」のすべての人々です。
_all フィールド
Elasticsearch には、バックグラウンドで連結を行う特別な _all フィールドがあります。自分でやる必要はありません。有効/無効にすることができます。
親子関係
ネストされたオブジェクトを使用するか、親子関係を使用するかの部分について: 親子関係を使用する方が適切であると思います。ネストされたオブジェクトは「フラット化」された方法で格納されます。つまり、配列内のネストされたオブジェクトからの情報は、1 つのオブジェクトの一部として格納されます。次の例を検討してください。
クライアントに注文があります:
client: 'Samuel Thomson'
orderline: 'Strong Thinkpad'
orderline: 'Light Macbook'
client: 'Jay Rizzi'
orderline: 'Strong Macbook'
'Strong Macbook' を注文したクライアントを検索する場合、ネストされたオブジェクトを使用すると、両方のクライアントが表示されます。これは、'Samuel Thomson' と彼の注文が ['Strong' 'Thinkpad' 'Light' 'Macbook'] のようにまとめて保存されるため、2 つの注文行に区別はありません。
親子ドキュメントを使用することで、同じクライアントのオーダーラインが混在せず、ID が保持されます。