假设我们有一个Foo
包含各种数据字段的实体,其中一个是List<Bar>
. 反过来, Bar 具有各种数据字段,其中一个是List<Snafu>
. 我们希望为用户提供一个输入字段,允许他们对持久的 Foo 记录进行通用搜索。例如,他们搜索test
并找到一条 Foo 记录,该记录有一个 Bar,该 Bar 有一个 Snafu,其数据字段包含字符串“test”。
是否可以有效地进行这种搜索,还是需要不同的技术(例如 Lucene)?
假设我们有一个Foo
包含各种数据字段的实体,其中一个是List<Bar>
. 反过来, Bar 具有各种数据字段,其中一个是List<Snafu>
. 我们希望为用户提供一个输入字段,允许他们对持久的 Foo 记录进行通用搜索。例如,他们搜索test
并找到一条 Foo 记录,该记录有一个 Bar,该 Bar 有一个 Snafu,其数据字段包含字符串“test”。
是否可以有效地进行这种搜索,还是需要不同的技术(例如 Lucene)?
是的,你应该看看使用 lucene。
hibernate-search 库(由 lucene 提供支持)非常容易在带有注释的实体上启动和运行,并且非常适合 hibernate 项目。
如果仅找出对 的引用就足够了Foo
,则可以创建一个数据库视图,其中包含所有引用表中的记录。为这样的视图编写 SQL 将非常简单。
否则,您可以查看 Lucene(如 rhinds 指出的那样),但这意味着您必须将数据库数据复制到其他地方。另一方面,搜索会更强大(例如,Lucene 与 DB 不同,可以轻松处理拼写错误)。