Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 контекстный поиск  [new]
Dragon Luck
Member

Откуда: Н. Новгород
Сообщений: 79
прошу поделиться опытом кто использовал Oracle Text

создал индекс для партиционной таблицы (партиции по дате на каждый день)
CREATE INDEX ind_1 ON Е_1 (data_1) -- data_1 varchar(250)
INDEXTYPE IS CTXSYS.CONTEXT local
PARAMETERS('SYNC(ON COMMIT)');

и стал его сравнивать с работой like по этой же таблице

CONTAINS(t.msg_data,'%слово1% OR %слово2% OR %слово3%')>0;

(upper(t.msg_data) like '%слово1%' or
upper(t.msg_data) like '%слово2%' or
upper(t.msg_data) like '%слово3%' );

(также проверял с AND и на фразу целиком)

в результате получил что like работает быстрее в некоторых случаях в 2 раза
обьем данных 3000000 строк на партицию

подскажите можно ли в моем случае как то использовать индекс при поиске типа like %слово%
(понятно что индекс работает лучше like при поиске 'слово%' и тем более 'слово')
26 апр 10, 17:38    [8691164]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
Dragon Luck,

Если ваше "слово" это действительно слово (в смысле языка), а не произвольный набор символов, то вам нужно искать 'слово', а не '%слово%'. Другими словами, Oracle Text предназначен для поиска именно слов, а не произвольных подстрок.

P.S. Прошу прощения за тавтологию :)
26 апр 10, 18:06    [8691372]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
Dragon Luck
Member

Откуда: Н. Новгород
Сообщений: 79
wildwind,

я видимо не правильно написал
подразумевалось что 'слово123' это только часть реального слова тоесть это может быть серединой слова
27 апр 10, 09:03    [8693228]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
Les
Member

Откуда: Москва
Сообщений: 438
Если у тебя %часть_слова%, то как не крути будет фулскан
Ты можешь запротоколировать, какие основные поисковые поля, и потом проанализировать?
Я у себя сделал так - перед полем для ввода условия поиска поставил выпадающий список,
с условиями "содержит","начинается","равно","заканчивается"
И по умолчанию значение "начинается" (это для фамилии, для имени, для отчества)
А дальше сам подставляю % там где надо
Иначе, если довести твою ситуацию до максимума, как ты будешь оптимизировать %аб% или просто %а%?
К слову сказать, у Кайта про текстовые индексы хорошо описано
27 апр 10, 09:23    [8693316]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
Dragon Luck,

В принципе контекстный индекс позволяет индексировать и подстроки. Но я когда с ним экспериментировал, получил огромные объемы индекса и неважную производительность. Отсюда и вывод
автор
Oracle Text предназначен для поиска именно слов, а не произвольных подстрок

Хотя, возможно, руки были недостаточно прямые.
27 апр 10, 11:08    [8693808]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
Dragon Luck
Member

Откуда: Н. Новгород
Сообщений: 79
wildwind,

нет он не индексирует подстроки он позволяет делать поиск по %подстрока%
и дело в том что так получается медленнее чем использование like

а если ты имел в виду поиск по лксеммам то Oracle Text не поддерживает для лексем русский язык
он не сможет найти по слову 'снег' слово 'снежный'
27 апр 10, 11:21    [8693917]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
Dragon Luck
нет он не индексирует подстроки

А вы пробовали?
27 апр 10, 12:18    [8694504]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
Dragon Luck
Member

Откуда: Н. Новгород
Сообщений: 79
wildwind,

да попробывал это ужас какой то
на обьем в 3,5 милиона записей индекс строился почти 2 часа
сожрал около 3 гигов памяти

и когда я наконец то дождался и протестил мне опять же поплохело
like '%подстрока%' опять работает быстрее чем CONTAINS(text,'%подстрока%')>0;
28 апр 10, 14:58    [8702630]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
Dragon Luck
мне опять же поплохело

Ну, я предупреждал. :)
Но это не значит "не индексирует".
28 апр 10, 18:23    [8704636]     Ответить | Цитировать Сообщить модератору
 Re: контекстный поиск  [new]
Dragon Luck
Member

Откуда: Н. Новгород
Сообщений: 79
попробовол еще раз потестить
и о чудо поиск работает быстрее чем like причем в 4 раза

надо было ставить CONTAINS(text,'подстрока')>0; без %

правда тест проводился на 600 тысячах строк и у него есть ограничение максимальная длина слова 64 символа

конечно размеры индекса и время создания ужасают но в принципе использовать можно
29 апр 10, 17:23    [8710408]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить