我正在使用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