【发布时间】:2013-04-15 19:49:17
【问题描述】:
假设我们有一个实体Foo,其中包含各种数据字段,其中一个是List<Bar>。反过来,Bar 具有各种数据字段,其中一个是List<Snafu>。我们希望为用户提供一个输入字段,允许他们对持久的 Foo 记录进行通用搜索。例如,他们搜索test,会发现一条 Foo 记录,它的 Bar 有一个 Snafu,其数据字段包含字符串“test”。
是否可以有效地进行这种搜索,还是需要不同的技术(例如 Lucene)?
【问题讨论】:
-
您能否提供一个更正式的通用搜索定义?您给出的示例仅建议表连接(
Foo->Bar->Snafu)。 -
那么如何在 Foo、Bar 和 Snafu 中的所有数据字段中搜索术语“test”?
-
sqlfiddle.com/#!2/070b3b/2 - 只是粗略的想法。但我的观点是,你应该首先定义你想要什么。在 DB 中搜索与在 Lucene 中搜索完全不同。
-
但是如果您还有另外两个 varchar 字段 y 和 z 也需要包含在搜索中怎么办?
-
然后您为此编写相关的 SQL。提示:我并不是在反对 Lucene,我唯一要求你的是定义 generic 的含义。您也可以对数据进行非规范化(例如,创建一个视图)并获得相同的结果。而且运行 SQL 时,你也不是不知道自己的数据库结构。
标签: hibernate jakarta-ee jpa lucene jpql