ユーザーのアクセシビリティにより、検索の検索を制限できますか?
-
24-10-2019 - |
質問
私は冬眠を使用しています。無料のテキストエンジンを探しています。
私がそれを調査する前に、私はあなたの経験が必要です。
アプリケーションユーザー、役割、オブジェクトテーブルにはあります。ユーザーが1つ以上の役割に接続され、役割が1つ以上のオブジェクトに接続されている場合。
無料のテキスト検索では、ユーザーはオブジェクトテーブルで視聴できるデータのみに到達できます。
Hibernate Searchは私を助けることができますか?
解決
これをチェックしてください:
http://lucene.apache.org/java/2_4_0/org/apache/lucene/search/filter.html
これがあなたが望むものを実装する適切な方法だと思います。これがどのようにHibernate-Searchに統合されているのか本当にわかりませんが、うまくいけば、何らかの形でフィルターをクエリに追加する方法があります。
後で編集:
あるように見えます:
http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html#query-filter
他のヒント
モデルがどのように見えるかを説明したものに基づいて、Hibernate検索はあなたが必要なものを非常に簡単に提供できるようになります。
埋め込みインデックスとフィルターの組み合わせを探しているようです。オブジェクトと役割の間には多くの関係があると思います。もしそうなら、あなたはおそらくオブジェクトにこのようなものを持っています:
@ManyToMany
@JoinTable(name = "object_role",
joinColumns = @JoinColumn(name = "object_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<Role>();
オブジェクト用に作成されたインデックスの一部として役割を取り、それらを埋め込むには、ただ置く必要があります @IndexedEmbedded(prefix = "somPrefixName")
その上 @ManyToMany
.
その後、使用してフィルターを定義できます @FullTextFilterDef
これは、この組み込みのインデックスとフィルターを特定の役割によって調べます(おそらく検索を実行しているユーザーの役割になるでしょう)。これにより、特定の役割に関連するオブジェクトのみが検索クエリによって返されることが保証されます。
要するに、冬眠検索はあなたが必要なものを提供することができるでしょう(私があなたの要件を正しく理解していると仮定すると)。どうすればよいかについてもっと詳細に説明します。
これらは2つの別々の問題です。
- ユーザーが内部で検索できるコンテンツを制限する
- 実際にコンテンツを検索します
2番目の問題では、簡単に使用できます 冬眠検索 (それは公正です Apache Lucene 少しの統合で)、最初のものについては、Luceneで検索する前に検索する適切なコンテンツの選択に集中する必要があります。
ユーザーを特定のデータのみに制限するために、データがアクセス可能な役割にマッピングされると仮定しています。この場合、ロールオブジェクトをインデックスする必要があります。次に、@IndexEdembedded Annotationを1対1または1対1のアソシエーションで使用します。
次に、次のようにクエリを作成できます。
これは、ユーザー管理システムの複雑さによっては機能する場合と機能しない場合があります。