java - Hibernate Search、Lucene 或任何其他替代方案?

标签 java hibernate lucene full-text-search hibernate-search

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

我需要更快地实现此搜索。

我想到了什么:

  1. 我从所有需要搜索的列中组装了额外的 TVECTOR 列,并在其上创建了全文索引。全文搜索非常快。但是...我无法在我的 .hbms 中映射此 TVECTOR 类型。所以这个想法失败了(无论如何我认为它更像是一个临时解决方案)。

  2. hibernate 搜索。 (今天第一次听说)它看起来很有前途,但我需要对此有经验的意见,因为我不想进入新的 API,可能不是最简单的,为了一些可以做得更简单的事情。

    <
  3. Lucene

无论如何,这张表现在已经发生了这种情况,但我希望解决方案更通用,并适用于与全文搜索相关的 future 案例。

感谢所有建议!

谢谢

最佳答案

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

所以回答你的问题:

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

  2. 使用起来一点都不难,您只需确定要搜索的属性即可。告诉 Hibernate 在哪里保存它的索引。然后可以使用EntityManager/Session接口(interface)来加载你搜索到的实体。

关于java - Hibernate Search、Lucene 或任何其他替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124557/

相关文章:

java - 跟踪更改的数据库设计 - w/Hibernate

java - Firebase 允许在时间戳内插入

java - 我在 hibernate(hibernate 3.5.5) 中遇到了 LikeExpression 的过期问题

java - 在Hibernate中生成非冲突非主键唯一 "composite ids"

Lucene Field.Store.YES 与 Field.Store.NO

java - 为什么mongodb oplog总是空的?

java - 使用 PKCS#7 加密

java - Postgres spring boot R2dbc应用程序中缺少DatabaseClient

Java, Spring : Text comparison sometimes adding null entries.

java - 内存不足错误 : Java heap space error when start solr