2013-02-20 4 views
1

В моем веб-приложении java нужно поместить текстовое поле «global search», которое будет искать по нескольким таблицам (разные столбцы) с помощью «Oracle Text»?Текстовый поиск Oracle по нескольким таблицам и столбцам

например.

Таблица Student {имя}

Таблица Учитель {имя}

Департамент Таблица {название, описание}

Таблица предмет {имя, название}

Теперь то, что я хотел бы do, так это то, что если пользователь вводит «Chem», чтобы это слово следовало искать с именем Student: name, Teacher: name, Department: name, Department: description, Subject: name, Subject: title, и он сортировал результат в соответствии с его 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»? –

+0

Нет, его не работает, потому что вы не можете создать индекс контекста на представлении. Я думаю, мне, возможно, придется использовать «USER_DATASTORE». –

0

Создать вид из таблиц, затем выберите из него:

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

Извините! Я хочу использовать Oracle Text. –

+0

@Java SE - Я не занимаюсь Java, я в Oracle, и это то, что вы делаете в Oracle. Вы можете использовать встроенный просмотр, как в примере dan1111, и выбрать его, как вы бы выбрали из любой таблицы/представления ... Сделайте это с самого начала. – Art

+0

«Oracle Text» - это инструмент поиска оракула, а не Java. http://docs.oracle.com/cd/B10501_01/text.920/a96517/cdefault.htm#1007619 –

0

Датастора пользователя позволяет склеивать несколько таблиц в один виртуальный документ, который Oracle Text использует для индексирования и поиска. Это позволит вам иметь одно предложение contains, которое ищет несколько таблиц. Когда вы создаете пользовательский хранилище данных, вы определяете столбцы в каждой из таблиц, которые вы хотите индексировать.

Смежные вопросы