2010-06-06 63 views
1

我正在使用Hibernate。我正在尋找一個免費的文本引擎。可以通過用戶可訪問性Hibernate搜索限制結果嗎?

在我調查之前,我需要你的經驗。

我在我的應用程序中有用戶,角色和對象表。用戶連接到一個或多個角色,並且角色連接到一個或多個對象的情況。

在我的自由文本搜索中,用戶只能訪問允許他通過對象表觀看的數據。

Hibernate搜索可以幫助我嗎?

回答

0

這是兩個不同的問題:

  • 限制其內容的用戶能夠內
  • 搜索實際上搜索內容

而對於第二個問題,你可以很容易地使用休眠搜索(這只是Apache Lucene與一點整合),第一個你應該集中精力選擇正確的內容你想在使用lucene搜索之前進行搜索。

+0

所以這是我的問題 - 我怎樣才能以索引方式將它們結合起來?因爲我不想使用每個角色的位置創建查詢!並且我不想帶所有的數據和內部搜索我需要創建索引的安全數據.. – Dejell 2010-06-06 14:07:27

+0

我認爲你可以過濾它們限制你將在其中進行搜索的實體。 – Jack 2010-06-06 14:34:45

4

根據你的描述你的模型的樣子,Hibernate Search的就能給你所需要的東西相當容易。

這聽起來像你正在尋找一個嵌入式索引和過濾器的組合。我假設你有對象和角色之間的多對多關係。如果是的話你可能在對象是這樣的:

@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來定義一個篩選器,該篩選器查看此嵌入式索引並按給定角色(這可能是運行搜索的用戶的角色)進行篩選。這將確保只有與給定角色相關的對象纔會被搜索查詢返回。總之,Hibernate Search將能夠提供你需要的東西(假設我正確理解你的需求)。如果您願意,我會很樂意詳細說明。

0

要限制用戶只有某些數據,我假設你的數據將被映射到可訪問的角色。如果是這種情況,則還需要索引角色對象。然後使用@IndexedEmbedded註釋與一對多或一對一關聯。

然後你就可以構建您的查詢,如: 「文本:+ input.getSearchText()+ 「+ role.roleText:」 + currentUser.getRole();

這可能會或可能不會取決於如何工作你的用戶管理系統是複雜的。

相關問題