Вход | Регистрация

Информационные технологии ::

Метки:

Волшебнику: поиск на форуме по теме без учета регистра...

Я
   valich
 
21.05.04 - 02:00
Наткнулся тут на старую тему за номером 400 а вернее на пост номер 8...
ТехИнфо: Сделан поиск по форуму (версия 1.0)
Попробовал потестить, вроде как не работает, хотя может я обглючился...
С другой стороны режим поиска через Яndex решает эту проблему, и возможно вопрос исчерпан... Жаль я тогда ее пропустил :-( А вдруг это еще актуально?
В общем, если я не ошибаюсь, сегодня наверное ни один SQL-сервер (РБД) не делает такой поиск с применением индекса. Почему я так уверен? Не будут же они хранить в индексе все варианты разности регистров для поля, это слишком накладно. Так что конструкция типа LIKE отпадает, она всегда работает по "PLAN NATURAL". С другой стороны в MySQL есть вариант с применением регулярных выражений, но это встроенная функция сервера, и как любая функция она "по-умолчанию" перебирает всю таблицу... Тут я бы попробовал обойти это ограничение следующим образом, хотя вариант и не совсем оптимальный в смысле требований к ресурсам.
-   Делаем еще одно поле в таблице с теми же параметрами.
-   В него будем параллельно заносить значение первого поля, только переведя его в верхний регистр.
-   Делаем по этому "искусственному" полю индекс.
-   А поисковое значение перед поисковым запросом переводим тоже в верхний регистр.
Способ конечно не ахти, размер таблицы, да и "лишняя" PHP-обработка будет при вводе... Но с другой стороны получаем оптимизированный способ поиска...
Не знаю, стал ли бы я применять это на форуме, тут ресурсы со всех сторон ограничены. Но, мне кажется, это единственный возможный способ.

P.S.: Так на всякий случай, вдруг ты еще хочешь свой поиск использовать. Хотя Яндексу надо отдать должное, сильно работает. Сам скоро проектик буду сдавать, обязательно использую...
 
 
   Волшебник
 
1 - 21.05.04 - 02:09
Прочитал, начал думать. :)
Размер базы увеличится не сильно, что-то около 500К. По времени тоже замедление не почувствуется. Наверное, надо делать.
   valich
 
2 - 21.05.04 - 08:48
С утра на свежую голову :-)
Что-то не сходится... тебе ведь подстроку искать надо, а в Ibase LIKE по любому не использует индексы... Счас проверю...
   romix
 
3 - 21.05.04 - 09:43
В MySQL в настройках вроде есть таблица перекодировки и таблица перевода в верхний регистр. То есть все это уже зашито в ядро (а иначе никак и нельзя).
   romix
 
4 - 21.05.04 - 09:47
Кстати, поиском невозможно пользоваться - я могу искать СВОИ ПОСЛЕДНИЕ ветки?
(или ветки где есть мои посты).
   valich
 
5 - 21.05.04 - 10:28
(3) Очень возможно...

(1) В общем верно, и MySQL и Firebird при использовании поиска по шаблону (LIKE) использует индекс только если первый символ шаблона указывается явно... Regexp на моей машине в любом случае не использует индекс. Так что мой первый вариант актуален только при поиске подстроки начиная с первого символа поля. К сожалению других возможностей я не нашел :-(
   valich
 
6 - 21.05.04 - 11:06
Есть правда еще один момент в MySQL, но сначала вопросик... Ты используешь для поиска функцию Match? Вроде как она решает эту задачу...
   Волшебник
 
8 - 21.05.04 - 12:17
(6) При полнотекстовом поиске используется MATCH (col1) AGAINST (str)
   Волшебник
 
9 - 21.05.04 - 12:18
(6) Но полнотекстовый поиск возможен только для строковых полей неограниченной длины, а поле для заголовка темы ограничено. Пока другого варианта, кроме как введения специального поля для поиска, я не вижу.
   valich
 
10 - 21.05.04 - 12:37
(9) У меня есть закачка мануала по MySQL, правда довольно старенькая, на русском. Так там к этой функции MATCH примерчик дан:
mysql> CREATE TABLE articles (
       id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
       title VARCHAR(200),
       body TEXT,
       FULLTEXT (title,body)
       );
И запрос:
mysql> SELECT * FROM articles
       WHERE MATCH (title,body) AGAINST ('database');
Я попробовал, правда у меня не все так скоро, я консолью пользуюсь... У меня есть одно поле varchar(100) в табличке. В общем работает. На версии 4.0.12
 
  Рекламное место пустует


Список тем форума
  Рекламное место пустует
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит Тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует