2013-04-22 74 views
1

假設我們有一個包含各種數據字段的實體Foo,其中一個爲List<Bar>。反過來,酒吧有各種數據字段,其中一個是List<Snafu>。我們希望爲用戶提供一個輸入字段,以便他們對持久化Foo記錄進行通用搜索。例如,他們搜索test,並且將找到一個Foo記錄,該記錄具有一個帶有包含字符串「test」的數據字段的Snafu的Bar。對持久化JPA實體執行通用搜索

是否有可能有效地進行這種搜索,或是否需要不同的技術(例如Lucene)?

+0

你能提供一個更正式的* generic * search的定義嗎?你給出的例子只建議表連接('Foo' - >'Bar' - >'Snafu')。 – mindas 2013-04-23 09:07:50

+0

那麼如何在Foo,Bar和Snafu中搜索「測試」一詞的所有數據字段? – theblang 2013-04-23 14:28:48

+0

http://sqlfiddle.com/#!2/070b3b/2 - 只是粗略的想法。但我的觀點是,你應該首先定義你想要的。在DB中搜索與在Lucene中搜索完全不同。 – mindas 2013-04-23 15:19:40

回答

0

如果這是足以讓你只需找出引用Foo,你可以創建一個包含所有被引用的表記錄的數據庫視圖。爲這樣的視圖編寫SQL將非常簡單。

否則,你可以看看Lucene(就像rhinds指出的那樣),但這意味着你將不得不在其他地方複製數據庫數據。另一方面,搜索會更加強大(例如,與DB不同,Lucene可以輕鬆處理拼寫錯誤)。