Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Полнотекстовый поиск в Interbase  (Прочитано 6668 раз)
0 Пользователей и 1 Гость смотрят эту тему.
CH
Гость
« : 13-04-2004 07:52 » 

Всем привет.
Подскажите пожалуйста есть ли в Interbase возможность для полнотекстового поиска.
Спасибо
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 13-04-2004 10:06 » 

что имеется в виду под полнотекстовым поиском? аналога специализированного индекса в MySql в ib нет, т.е. в блобах поиск можно организовать только через хранимую процедуру, которая будет просматривать все записи и возвращать нужные. синтаксис sql достаточно примитивный, так что скорее всего для самого поиска придётся использовать UDF.

но есть возможность искать в строковых полях. размер строковых полей может быть достаточно внушительным - до 32 тыс. знаков для однобайтовых кодировок. при использовании мультибайтовых кодировок, типа unicode, маскимальный размер определяется как частное от 32767 на кол-во байтов (например, для UNICODE_FSS, 3 байта на символ, максимальный размер равен 10922).  короче, обычные строковые поля ib в большинстве случаев способны благополучно заменить блобы, и вот в них-то и можно организовать поиск стандартными средствами sql-запроса.

средств этих несколько.

1. строгое равенство
Код:

select *
from table
where s = 'asd';

вернёт все записи, где поле s = 'asd'.

2. равенство начальных символов
Код:

select *
from table
where s starting with 'asd';

вернёт всё записи, где поле s начинается с 'asd'.

3. проверка вхождения
Код:

select *
from table
where s like '%asd%';

вернёт всё записи, где поле s содержит 'asd'.
этот вариант самый мощный из всех и благополучно заменяет все прочие. знак процента, фактически, определяет маску:
'%asd' - вернёт записи, начинающиейся с asd
'asd%' - вернёт записи, заканчивающиеся на asd
'%asd%' - вернёт все записи, содержащие asd.

если необходимо осуществлять поиск без учёта регистра, для всех трёх вариантов можно использовать стандартную функцию UPPER. например,
Код:

select *
from table
where UPPER )s: like '%ASD%';

вернёт всё записи, где поле s содержит 'asd' без учёта регистра.

только при этом не надо забывать и сам текст тоже писать в верхнем регистре, иначе запрос никогда не вернёт ни одного значения Улыбаюсь я на это как-то поймался, полдня не мог понять что происходит, потом ещё полдня матерился, когда дошло.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines