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