ネストされたドキュメント | KandaSearch Community Support Forum

ネストされたドキュメント

トピック作成者:ks-solruserml-bot (2025/08/21 12:03 投稿)
1
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/2zwy0hrz8f7w106ws3hy9pl6tqxr386g into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは。

現在、私たちのアプリケーション向けに新たなSolrインストールを構築しています。
このシステムでは、「ファイル情報」を file ドキュメントに、「ファイルバージョン情報」を fileversion ドキュメントに格納する設計を検討しています。

すべてのファイルバージョンは、あるファイルドキュメントに関連付けられているため、ファイルバージョンをその親となるファイルドキュメントの子ドキュメントとして格納するのは良いアイデアか? という疑問が生じています。
もしそのようにすれば、ファイルの所有者やACL(アクセス制御リスト)のようなプロパティは、すべてのファイルバージョンドキュメントにコピーする必要がなく、親であるファイルドキュメント内にのみ保持すれば済みます。

ただ、いくつかのSolr関連の書籍では、「データの非正規化(denormalization)がSolrにおけるもっとも一般的なデータの保存方法」だと書かれていました。
つまり、この考え方に従うと、ファイルバージョンをネストした子ドキュメントにせず、それぞれ独立したドキュメントとして file ドキュメントと並べて保持し、所有者情報やACLなども各バージョンごとに持たせたほうが理にかなっている、ということになります。

このような設計判断に関するベストプラクティスのガイドなどは存在するのでしょうか?

何かヒントがあれば、ぜひ教えていただきたいです。

よろしくお願いします。
Marc

返信投稿者:ks-solruserml-bot (2025/08/21 12:03 投稿)

こんにちは、Marc。

考慮すべき懸念点が2つあります:

  • 検索結果として何を得たいか
    もし検索結果として「一意のファイル」のみを取得したいのであれば、ネスト(親子構造)を使うのが適しているかもしれません。
    一方で「同じファイルの複数バージョンが検索結果に並んでも構わない」のであれば、**非正規化(denormalize)**するのが良いでしょう。
    FieldCollapsing(フィールドでの集約)や Grouping(グルーピング)、query-time join(クエリ時の結合)といった機能を使えばある程度柔軟に対応可能ですが、動作確認が必須です。

  • 更新コスト
    新しいバージョンが頻繁に追加され、1つのファイルに多くのバージョンが紐づく場合、**再インデックスによる負荷の増大(reindex amplification)**が問題になるかもしれません。
    そのため、プロトタイプを作って実際にテストし、SLA(サービスレベル目標)を満たせるか確認することが重要です。

ご注意を。

--
よろしくお願いします、
Mikhail Khludnev

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2025 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?