跨多个表和列的Oracle文本搜索

时间:2013-02-20 12:09:28

标签: sql oracle plsql oracle10g oracle11g

在我的java web应用程序中想要使用“Oracle Text”来放置“全局搜索”文本框,该文本框将搜索多个表(不同列)?

e.g。

表学生{name}

表教师{name}

表部门{名称,描述}

表主题{name,title}

现在我想做的是,如果用户输入“Chem”,则应该针对Student:name,Teacher:name,Department:name,Department:description,Subject:name,Subject:title column and search它会根据Oracle Text Score对结果进行排序吗?

任何人都可以建议实现这一目标的最佳方法是什么?不确定如何使用“包含”oracle文本函数在单个查询中搜索多个表中的所有列?

另外,请假设表之间没有关系。提前谢谢!

3 个答案:

答案 0 :(得分: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 ...

如果您需要以某种方式链接回原始表,则可能需要添加此内容。

答案 1 :(得分:0)

从表中创建一个视图,然后从中进行选择:

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

答案 2 :(得分:0)

用户数据存储区允许您将多个表粘贴到一个虚拟文档中,Oracle Text使用该文档进行索引和搜索。这将允许您有一个包含子句来搜索多个表。创建用户数据存储区时,可以在每个要编制索引的表中定义列。