コンテンツ検索とACLの適用

トピック作成者:ks-solruserml-bot (2024/05/23 12:53 投稿)
2
CloseClose

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

皆さん、こんにちは。

私のユーザー向けに実装に苦労しているユースケースがあります。ここで洞察を見つけられることを期待しています。

私たちは、ユーザーがほぼすべてのコンテンツデータを検索できるようにしたいと考えていますが、アクセス制御ポリシーを尊重します。私のユーザーはチームにグループ化されており、ポリシーはチームに基づいてコンテンツに適用されます。

現在の実装方法は、任意のデータをドキュメントとして保存することです。

{
type: contact_number,
value: 1234567890,
aclId: 1_contact_number
}

(コンテンツインデックス内で6百万のドキュメント)

および

{
aclId: 1_contact_number,
canRead: TEAM_A
}

(ACLインデックス内で200万のドキュメント)

両方のインデックスでaclIdのDocValuesが有効になっています。

クエリ中に、コンテンツインデックスをクエリし、fqでJoinクエリパーサーを使用して次のようにfq={!join from=aclId fromIndex=acl to=acl_id}canRead: TEAM_A OR TEAM_B、ユーザーがTEAM_AおよびTEAM_Bの一部である場合。 キャッシュされていないクエリには約8秒かかります。

私の理解に基づくと、これは遅いのは、Solrが以下の作業を行うためです。

  1. ACLインデックスからすべてのヒットを取得します。
  2. ACLインデックスからのヒットに一致するドキュメントを見つけるために、コンテンツインデックス全体を検索します。
  3. 残りのコンテンツクエリを適用して、コンテンツインデックスからの結果をフィルタリングします。

また、私たちは「{!join ... score=none}」を使用してみました(Googleで見つけたものに基づいて)。

これを改善するための考え:

  • ストリーミング式を使用することを考えましたが、コンテンツインデックスで/exportを使用すると、スコア以外のフィールドでソートする必要があります。
  • コンテンツインデックスを単にコンテンツでクエリし、結果を取得してバックエンドでaclに基づいてフィルタリングを行う。最初の10件の結果が得られるまで。
  • これには全体のACLをロードする必要があります。
  • ACLのためにドキュメントが削除され続ける場合は、繰り返しコンテンツインデックスをクエリします。
  • 利点は、コンテンツインデックス全体を検索する必要がないことです。
  • これはプラグインになるかもしれませんか?(労力に値するかどうかはわかりません)

私は間違った道を進んでいますか?

返信投稿者:ks-solruserml-bot (2024/05/23 12:54 投稿)

こんにちは、

確かに興味深い質問ですね。過去に私もACL設計に関わったことがあります。

Lucene/Solrの内部をあまり見ていないので、最初に、ドキュメントとACLを同じコレクション(インデックス)に保存すると、パフォーマンスが向上する可能性があると思います。
https://solr.apache.org/guide/8_8/other-parsers.html#parameters
*score=none* と *method=topLevelDV* を使用するとよいでしょう。
*method=index* と比較すると興味深いでしょう。
その後、関連するキャッシュを確認し、適切に調整します。

さらなる改善点はありますが、内部をもう少し調査する必要があります。
別の選択肢としては、ノーマライズを解除し、リーダー情報を元のドキュメントに直接配置することができます(Acl IDではなく)。
もちろん、これには他の観察と結果が伴います。

それでは、幸運を祈っています。


Alessandro Benedetti
Apache Lucene/Solr コミッター
ディレクター、R&D ソフトウェアエンジニア、検索コンサルタント
www.sease.io

返信投稿者:ks-solruserml-bot (2024/05/23 12:54 投稿)

Alessandro、返信ありがとうございます!あなたのアドバイスを試してみて、うまくいくかどうか見てみます。近々こちらに貢献できることを願っています!

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

KandaSearch

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

投稿の削除

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