Hibernate Search可以通过用户可访问性限制结果吗?

时间:2010-06-06 13:27:19

标签: java hibernate hibernate-search

我正在使用Hibernate。我正在寻找一个免费的文本引擎。

在我调查之前,我需要你的经验。

我的应用程序中有用户,角色和对象表。用户连接到一个或多个角色,角色连接到一个或多个对象的位置。

在我的自由文本搜索中,用户只能访问允许他按对象表观看的数据。

Hibernate搜索可以帮助我吗?

4 个答案:

答案 0 :(得分:5)

根据您所描述的模型,Hibernate Search将能够非常轻松地为您提供所需的内容。

听起来您正在寻找嵌入式索引和过滤器的组合。我假设你在Object和Role之间有很多关系。如果是这样,你可能在Object中有这样的东西:

@ManyToMany
@JoinTable(name = "object_role",
            joinColumns = @JoinColumn(name = "object_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<Role>();

要获取角色并将其作为为Object创建的索引的一部分嵌入,您需要将@IndexedEmbedded(prefix = "somPrefixName")放在@ManyToMany之上。

然后,您可以使用@FullTextFilterDef定义过滤器,该过滤器查看此嵌入式索引并按给定角色进行过滤(可能是运行搜索的用户的角色)。这将确保搜索查询仅返回与给定角色相关的对象。

简而言之,Hibernate Search将能够提供您所需要的(假设我正确理解您的要求)。我很乐意提供更多细节,如果你愿意。

答案 1 :(得分:2)

检查出来:

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

答案 2 :(得分:0)

这是两个不同的问题:

  • 限制用户可以在
  • 中搜索的内容
  • 实际搜索内容

对于第二个问题,您可以轻松使用 Hibernate Search (只需 Apache Lucene 进行一些集成),对于第一个问题,您应该专注于选择在使用lucene搜索之前要搜索的正确内容。

答案 3 :(得分:0)

要将用户限制为仅限某些数据,我假设您的数据将映射到可访问的角色。如果是这种情况,您还需要索引角色对象。然后使用@IndexedEmbedded批注与一对多或一对一关联。

然后你可以构建你的查询,如: “text:+ input.getSearchText()+”+ role.roleText:“+ currentUser.getRole();

根据您的用户管理系统的复杂程度,这可能会也可能不会起作用。