2010-06-06 65 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();

这可能会或可能不会取决于如何工作你的用户管理系统是复杂的。

相关问题