3

Elasticsearch データベース インデックスの設定について質問があります。elasticsearch でインデックスを作成するテーブルを作成しました。このテーブルは、複数のテーブルにクエリを実行してデータを非正規化するスクリプトから構築されているため、一意の ID 1:1 の比率で簡単にインデックスを作成できます

私が持っている一連のフィールドの例は、、、、でありstreet、クエリを実行できますが、私の質問は、これらのフィールドを個別にインデックス付けしたままにするか、前のすべてのフィールドを含むような 1 つの大きなフィールドとして連結するかです。 1つに?それとも、親子インデックスをセットアップするために余分な時間を費やしていますか?citystatezipaddress

ユースケースの例は、一方向からの請求情報を持つ顧客がいる場合です。elasticsearch にクエリを実行して、その顧客が既に存在するかどうかを確認するか、少なくとも最も近い結果を返します。

この質問はプログラミングよりも概念的なものであることはわかっていますが、ベストプラクティスの情報が見つかりません。

4

1 に答える 1

3

連結

あなたの質問の最初の部分について: さまざまなフィールドを連結して、すべての情報を含むフィールドにするつもりはありません。複数のフィールドがあると、それらのフィールドでファセットと集計を計算できるという利点があります。たとえば、特定の都市の顧客数や特定の郵便番号を持つ顧客の数などです。一致クエリまたは複数一致クエリを使用して、さまざまなフィールドからの情報を照会できます。

情報を別々のフィールドに入れることに加えて、分析済み部分と分析済みでない部分 (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 が保持されます。

于 2014-03-01T10:59:24.287 に答える