2013-02-20 57 views
1

在我的java web應用程序中想要將「全局搜索」文本框用於使用「Oracle Text」搜索多個表(不同列)?在多個表和列中進行Oracle文本搜索

例如

表學生{名}

表教師{名}

表系{名稱,描述衝

表主題{名,標題}

現在我想什麼do是,如果用戶輸入「Chem」,這個單詞應該搜索學生:名稱,教師:名稱,部門:名稱,部門:描述,主題:名稱,主題:標題欄,它會按照其Oracle文本分數?

任何人都可以建議什麼是達到此目的的最佳方法?不知道如何使用「Contains」oracle文本函數在單個查詢中搜索多個表中的所有列?

此外,請假設表格之間沒有關係。提前致謝!

回答

0

你可以做這樣的事情:

with search_fields as (
    select 'student' as table, 
      'name' as field, 
      name as text 
     from student 
    union all 
    select 'teacher' as table, 
      'name' as field, 
      name as text 
     from student 
    union all 
    ... 
) 
select * from search_fields where text contains ... 

您可能需要添加到這一點,如果你需要以某種方式鏈接到原始表。

+0

這意味着我必須在「Search_fields」視圖的文本列上添加索引? – 2013-02-20 13:28:59

+0

不,它不工作,因爲您無法在視圖上創建上下文索引。我想我可能需要使用「USER_DATASTORE」。 – 2013-02-20 14:02:27

0

創建一個從你的表視圖,然後從中選擇:

SELECT * FROM your_view WHERE UPPER(name) Like Upper('Chem%'); -- or '%Chem%' 
+0

對不起!我想使用Oracle Text。 – 2013-02-20 14:01:26

+0

@Java SE - 我不是在做Java,我是在Oracle中,這就是你在Oracle中所做的。您可以像在dan1111的示例中那樣使用內聯視圖,並從中選擇它,就像您從任何表格/視圖中選擇一樣......從一開始就做正確的操作。 – Art 2013-02-20 14:09:32

+0

「Oracle Text」是Oracle搜索工具,不是Java。 http://docs.oracle.com/cd/B10501_01/text.920/a96517/cdefault.htm#1007619 – 2013-02-20 14:11:14

0

用戶數據存儲,您可以膠水多個表到一個虛擬文件,即Oracle Text的使用索引和搜索。這將允許您有一個包含子句來搜索多個表。在創建用戶數據存儲時,您可以在每個希望建立索引的表中定義列。