我正在使用冬眠。我正在寻找免费的文本引擎。

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

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

在我的免费文本搜索中,用户只能找到他可以通过对象表观看的数据。

冬眠搜索可以帮助我吗?

有帮助吗?

解决方案

看一下这个:

http://lucene.apache.org/java/2_4_0/api/org/opache/lucene/search/filter.html

我认为这是实施您想要的正确方法。真的不知道如何将其集成到Hibernate-Search中,但是希望有一种方法可以以某种方式添加过滤器。

以后编辑:

看起来有:

http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html#query-filter

其他提示

根据您所描述的模型的外观,Hibernate搜索将能够轻松地为您提供所需的东西。

听起来您正在寻找嵌入式索引和过滤器的组合。我认为您在对象和角色之间有许多与众不同的关系。如果是这样,您可能在对象中有类似的东西:

@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 这是通过给定角色来查看此嵌入式索引和过滤器(大概是运行搜索的用户的角色)。这将确保仅通过搜索查询返回与给定角色相关的对象。

简而言之,休眠搜索将能够提供您需要的东西(假设我正确理解您的要求)。我将很乐意提供有关您是否想要的更多详细信息。

这是两个单独的问题:

  • 限制用户能够在哪个内容中搜索的内容
  • 实际搜索内容

对于第二个问题,您可以轻松使用 休眠搜索 (那只是 Apache Lucene 有一点集成),对于第一个集成,您应该集中精力选择要搜索的正确内容,然后再与Lucene搜索。

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

然后,您可以像以下内容一样构造查询:“ text: + input.getSearchText() +” + rowar.roletext:“ + currentuser.getrole();

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top