我有一个查询正在对表的大约 11 个字符串或文本字段执行 ILIKE,该字段并不大(500 000),但对于 ILIKE 显然太大了,搜索查询需要大约 20 秒。数据库是postgres 8.4
我需要更快地实现此搜索。
我想到了什么:
我从所有需要搜索的列中组装了额外的 TVECTOR 列,并在其上创建了全文索引。全文搜索非常快。但是...我无法在我的 .hbms 中映射此 TVECTOR 类型。所以这个想法失败了(无论如何我认为它更像是一个临时解决方案)。
hibernate 搜索。 (今天第一次听说)它看起来很有前途,但我需要对此有经验的意见,因为我不想进入新的 API,可能不是最简单的,为了一些可以做得更简单的事情。
<Lucene
无论如何,这张表现在已经发生了这种情况,但我希望解决方案更通用,并适用于与全文搜索相关的 future 案例。
感谢所有建议!
谢谢
最佳答案
我强烈推荐 Hibernate Search,它在 Hibernate 和 Lucene 之间提供了一个非常易于使用的桥梁。请记住,您将在此处同时使用两者。您只需在您希望能够搜索的域类上注释属性。然后,当您更新/插入/删除启用搜索 Hibernate Search 的实体时,只需更新相关索引。只有在发生数据库更改的事务已提交时才会发生这种情况,即如果它回滚,索引将不会被破坏。
所以回答你的问题:
是的,您可以为特定表上的特定列建立索引。您还可以对字段的内容进行标记化,以便您可以匹配字段的各个部分。
使用起来一点都不难,您只需确定要搜索的属性即可。告诉 Hibernate 在哪里保存它的索引。然后可以使用EntityManager/Session接口(interface)来加载你搜索到的实体。
关于java - Hibernate Search、Lucene 或任何其他替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124557/