1

私はHibernateを使用しています。フリーテキストエンジンを探しています。

調査する前に、あなたの経験が必要です。

アプリケーションにユーザー、ロール、オブジェクトのテーブルがあります。ユーザーが1つ以上のロールに接続されており、ロールが1つ以上のオブジェクトに接続されている場合。

私のフリーテキスト検索では、ユーザーはオブジェクトテーブルで監視できるデータのみにアクセスできます。

Hibernate検索はそれを助けてくれますか?

4

4 に答える 4

5

モデルの外観を説明した内容に基づいて、HibernateSearchは必要なものを非常に簡単に提供できるようになります。

埋め込みインデックスとフィルターの組み合わせを探しているようです。オブジェクトとロールの間には多対多の関係があると思います。もしそうなら、あなたはおそらくオブジェクトにこのようなものを持っています:

@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")ロールを取得し、Object用に作成されたインデックスの一部として埋め込むには、上記に配置する必要があります@ManyToMany

次に、この埋め込みインデックスを参照するを使用してフィルターを定義@FullTextFilterDefし、特定のロール(おそらく、検索を実行しているユーザーのロール)でフィルターをかけることができます。これにより、指定されたロールに関連するオブジェクトのみが検索クエリによって返されるようになります。

つまり、Hibernate Searchは必要なものを提供できるようになります(私があなたの要件を正しく理解していると仮定します)。ご希望の場合は、詳細をお知らせさせていただきます。

于 2011-02-10T02:55:00.623 に答える
2

これをチェックしてください:

http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Filter.html

これがあなたが望むものを実装するための適切な方法だと思います。これがどのように休止状態検索に統合されているのかはよくわかりませんが、クエリにフィルターを追加する方法があるといいのですが。

後で編集:

あるように見えます:

http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html#query-filter

于 2010-06-06T14:19:23.230 に答える
0

これらは2つの別々の問題です:

  • ユーザーが検索できるコンテンツを制限する
  • 実際にコンテンツを検索する

2番目の問題ではHibernateSearch(つまり、少し統合されたApache Lucene )を簡単に使用できますが、最初の問題では、luceneで検索する前に、検索する適切なコンテンツの選択に集中する必要があります。

于 2010-06-06T13:32:17.660 に答える
0

ユーザーを特定のデータのみに制限するために、私はあなたのデータがアクセス可能な役割にマップされると想定しています。この場合、ロールオブジェクトにもインデックスを付ける必要があります。次に、@ IndexedEmbeddedアノテーションを使用して、1対多または1対1の関連付けを行います。

次に、次のようにクエリを作成できます。 "text:+ input.getSearchText()+" + role.roleText: "+ currentUser.getRole();

これは、ユーザー管理システムの複雑さに応じて機能する場合と機能しない場合があります。

于 2011-03-10T02:22:20.883 に答える