Изменение понятия "СЛОВО" в полнотекстовом поиске

Роберт

Аналитик
Изменение понятия "СЛОВО" в полнотекстовом поиске

Если заглянуть в описание полнотекстового посика , то там однозначно написано:
Для разбивки текста на слова MySQL использует очень простой синтаксический анализатор. "Словом" является любая последовательность символов, состоящая из букв, чисел, знаков ‘'’ и ‘_’.
А можно ли как-то расширить понятие "Слово" для полнотекстового поиска в MySQL? Чтобы в состав слова входили и символы "." (точка).
Просто в гигабайтной текстовой базе частенько приходится искать не только слова , но и даты... Даты имеют стандартный формат дд.мм.гггг (ну тоесть 27.12.2005). И если я задам:
select Count(*) from Tablica where MATCH(InfoPole) AGAINST ('27.12.2005' IN BOOLEAN MODE)
то база за 1 секунду возращает 200 тысячь совпадений (так как разделённое точкой он считает разными словами , и практически во всех статьях есть "27" , "12" или "2005").
Если же я запрошу:
select Count(*) from Tablica where MATCH(InfoPole) AGAINST ('"27.12.2005"' IN BOOLEAN MODE) (я тут добавил кавычки)
то сервер (AMD Athlon 64 3000+ c RAM:512Mb) думает почти 20 секунд прежде чем вернуть две совпавшие записи. Это недопустимо много , так как днём в среднем запросы поступают каждые 4 секунды.
Если же искать обычные слова , то поиск в среднем происходит за 0.03 - 0.08 секунды (считаем что мгновенно).

Так что повторюсь - можно ли как-то уговорить MySQL считать точку тоже частью слова? (это ещё помогло бы и при поиске дробных чисел , типа "число 3.14" , или версий программ , типа "MySQL 5.0.17").

P.S. Только не советуйте пожалуйста перекомпилировать MySQL , или поменять во всех базах дату на 27_12_20005 , или вообще вынести дату в отдельное поле чтобы при заданной пользователем строке "Воробьянинов энергетика 27.12.2005" , первые два слова искались в одном поле , а даты в другом...
 

alpine

Новичок
Роберт
Если написать LIKE "%27.12.2005%" тогда сколько будет думать?
 

Роберт

Аналитик
alpine
Раньше у меня весь поиск по статьям через LIKE и работал. Всё было нормально , но медленно , тем более что обьём базы с каждым днём всё больше и больше. Вот и перешёл на полнотекстовый поиск...
Через LIKE запрос выполняется примерно 15 секунд , что в общем-то быстрее чем запрос в кавычках при полнотекстовом поиске , но всё же никак не может меня устроить...

К сожалению пришёл к выводу , что единственный вариант - это создание дополнительного поля в которое будут вноситься все слова с точкой , только точка будет заменена на знак подчёркивания. И запросы пользвователей будут модифицироваться соответсвенно и искаться также в этом новом поле... :(

Но может в MySQL'e можно как-то включить точку в состав допустимых символов для слов?
 

Роберт

Аналитик
white phoenix
Нет. Я ведь писал в самом первом сообщении цитату из документации:
Для разбивки текста на слова MySQL использует очень простой синтаксический анализатор. "Словом" является любая последовательность символов, состоящая из букв, чисел, знаков ‘'’ и ‘_’.

При этом , например , если опостраф является первым или последним знаком в слове , то он не считается , а учитывается только если он внутри слова. И точно ТОЖЕ САМОЕ я бы хотел бы сделать с точкой... чтобы база по таким же правилам считалась составной частью слова в MySQL при полнотекстовом индексировании и поиске.
 

white phoenix

Новичок
Скорее всего такое невозможно (без исправления исходников конечно).
 
Сверху