Hibernate Search,Lucene还是其他任何替代方案?

Jul*_*lia 10 java lucene full-text-search hibernate hibernate-search

我有一个查询,它在表的大约11个字符串或文本字段上进行ILIKE,这个字段不大(500 000),但对于ILIKE显然太大,搜索查询需要20秒.数据库是postgres 8.4

我需要实现这个搜索更快.

我想到了什么:

  1. 我从需要搜索的所有列中组装了另外的TVECTOR列,并在其上创建了全文索引.全文搜索非常快.但是......我无法在我的.hbms中映射这个TVECTOR类型.所以这个想法下降了(无论如何我更多地将它作为临时解决方案).

  2. Hibernate搜索.(今天第一次听到它)它看起来很有希望,但我需要经验丰富的意见,因为我不想进入新的API,可能不是最简单的,因为可以做得更简单.

  3. Lucene的

在任何情况下,这个表现在已经发生了,但我希望解决方案更通用,并应用于与全文搜索相关的未来案例.

所有建议都表示赞赏!

感谢名单

Ale*_*nes 12

我强烈推荐Hibernate Search,它提供了一个非常容易使用的Hibernate和Lucene之间的桥梁.记住,你将在这里使用这两个.您只需注释您希望能够搜索的域类的属性.然后,当您更新/插入/删除已启用搜索的实体时,Hibernate Search只会更新相关索引.只有在发生数据库更改的事务已提交时才会发生这种情况,即如果它已回滚,则索引不会被破坏.

那么回答你的问题:

  1. 是的,您可以索引特定表上的特定列.您还可以对字段的内容进行标记,以便您可以匹配字段的各个部分.

  2. 根本不难使用,您只需确定要搜索的属性.告诉Hibernate保存索引的位置.然后可以使用EntityManager/Session接口加载您搜索过的实体.


Ste*_*ter 6

由于您已经在使用Hibernate和Lucene,因此Hibernate Search是一个很好的选择.

Hibernate Search主要提供的是一种机制,可以在数据更改时更新Lucene索引,并且能够最大化您已经了解的Hibernate,以简化对Lucene索引的搜索.

您将能够指定要索引的每个实体中的特定字段,以及根据需要添加多种类型的索引(例如,词干和全文).您还可以管理关联的索引图,以便通过Search/Lucene进行相当复杂的查询.

我发现最好依靠Hibernate Search进行文本搜索,但是要恢复普通的旧Hibernate以进行更传统的搜索,并为复杂的对象图形进行水合以进行结果显示.