1

Elasticsearch にはネストされたドキュメントがあります (素晴らしい)。これを使用して、メッセージ (トップレベルのドキュメント) とその作成者 (ネストされたドキュメント) を保存したいと思います。

1 人の作成者が多数のメッセージを持つことができるため、作成者の 1 つのバージョンを複数のメッセージの子として参照できますか?

そうすれば、Author データを 1 か所で更新すると、それらが参照されているすべての場所で更新されます。

NB: これは関連しています: Elasticsearch で結合を行う方法 (または Lucene レベルで) ここでの回答は、それも解決する可能性があります。

4

1 に答える 1

4

_parentマッピングを使用して確認することをお勧めします: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-parent-field.html

これにより、Author のタイプと Message の別のタイプ (Author の _parent タイプを使用) を作成し、ドキュメントを個別にインデックス付けして、時間の経過とともにメッセージに追加することができます。Author の単一バージョンを更新するだけで、その Author を持つすべてのメッセージのクエリに影響を与えることができます。

特定の作成者のメッセージのクエリを実行するには、has_parent クエリまたはフィルターを使用する必要があります。または逆に、has_child を使用して、特定のメッセージを持つ作成者を見つけます。

  • has_child は、クエリに一致する子ドキュメントを持つ親ドキュメントになります
  • has_parent は、クエリに一致する親ドキュメントを持つ子ドキュメントになります

ネストされたドキュメントではなく、このより動的なフォームを使用しており、(クエリとファセットの両方で) うまく機能していますが、_parent事後にマッピングを追加するため、そのタイプのドキュメントをロードする前にマッピングを定義することに注意する必要があります。私にはうまくいかないようです。そして、インデックスの再作成は、これまで私が管理できなかったものです。

于 2013-10-22T22:48:14.050 に答える