我正在使用Hibernate。我正在尋找一個免費的文本引擎。可以通過用戶可訪問性Hibernate搜索限制結果嗎?
在我調查之前,我需要你的經驗。
我在我的應用程序中有用戶,角色和對象表。用戶連接到一個或多個角色,並且角色連接到一個或多個對象的情況。
在我的自由文本搜索中,用戶只能訪問允許他通過對象表觀看的數據。
Hibernate搜索可以幫助我嗎?
我正在使用Hibernate。我正在尋找一個免費的文本引擎。可以通過用戶可訪問性Hibernate搜索限制結果嗎?
在我調查之前,我需要你的經驗。
我在我的應用程序中有用戶,角色和對象表。用戶連接到一個或多個角色,並且角色連接到一個或多個對象的情況。
在我的自由文本搜索中,用戶只能訪問允許他通過對象表觀看的數據。
Hibernate搜索可以幫助我嗎?
檢查了這一點:
http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Filter.html
我想,這是實現你想要的正確方法。不知道如何將它集成到hibernate-search中,但希望有一種方法可以以某種方式爲查詢添加過濾器。
後來編輯:
它看起來像有:
http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html#query-filter
這是兩個不同的問題:
而對於第二個問題,你可以很容易地使用休眠搜索(這只是Apache Lucene與一點整合),第一個你應該集中精力選擇正確的內容你想在使用lucene搜索之前進行搜索。
根據你的描述你的模型的樣子,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將能夠提供你需要的東西(假設我正確理解你的需求)。如果您願意,我會很樂意詳細說明。
要限制用戶只有某些數據,我假設你的數據將被映射到可訪問的角色。如果是這種情況,則還需要索引角色對象。然後使用@IndexedEmbedded註釋與一對多或一對一關聯。
然後你就可以構建您的查詢,如: 「文本:+ input.getSearchText()+ 「+ role.roleText:」 + currentUser.getRole();
這可能會或可能不會取決於如何工作你的用戶管理系統是複雜的。
所以這是我的問題 - 我怎樣才能以索引方式將它們結合起來?因爲我不想使用每個角色的位置創建查詢!並且我不想帶所有的數據和內部搜索我需要創建索引的安全數據.. – Dejell 2010-06-06 14:07:27
我認爲你可以過濾它們限制你將在其中進行搜索的實體。 – Jack 2010-06-06 14:34:45