1

我正在构建一个带有后端 RESTful Web 服务的 Web 应用程序。

我的一个表几乎是独立的,即仅从另一个表引用的行以一种我可以在没有连接的情况下愉快地生活并且只在需要时通过主键获取的方式引用。然而,这个表包含很多行,并且针对它执行的搜索都尖叫“Lucene”。MySQL 无法以合理的响应时间处理这些查询。

所以我想使用 Lucene 来搜索这个表。过去我广泛使用 Solr,因此我熟悉概念和术语。我在想,鉴于上述情况,而不是 SQL 到 Lucene 索引同步,我看不出为什么我不应该简单地使用 Lucene 作为这个特定实体的规范存储。基本上我想要一个“Lucene DAO”实现来替换这个特定表的当前 Hibernate DAO 实现。

所以我的问题是:

  1. 有什么理由我应该避免这种情况并坚持 SQL-to-index 同步?
  2. 如果“Lucene DAO”是一种可行的方法,那么是否有任何库可以为类似的东西提供基础?我试图搜索但找不到任何东西。
  3. 我遇到过Hibernate Search它只完成了我正在寻找的一半,但我可以尝试将其仅用于搜索。有没有人有使用 Hibernate Search 的经验?

编辑:我现在遇到了Compass,一眼看去似乎就是我要找的东西。有没有人有这方面的经验?


编辑#2:Compass 已经停产并被 ElasticSearch 取代,这并不完全相同(服务而不是组件)。Hibernate Search 也不是我想要的。底线是这是一种有效的方法,但目前必须自己实现这样的 DAO。

4

1 回答 1

2

我会为这个用例放弃 SQL 并直接使用 Lucene,没有追逐者。

您使用 Lucene 的查询将更加丰富:n-grams 而不是 LIKE。

于 2012-04-28T13:59:56.720 回答