Роберт
Аналитик
Изменение понятия "СЛОВО" в полнотекстовом поиске
Если заглянуть в описание полнотекстового посика , то там однозначно написано:
Для разбивки текста на слова 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" , первые два слова искались в одном поле , а даты в другом...
Если заглянуть в описание полнотекстового посика , то там однозначно написано:
Для разбивки текста на слова 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" , первые два слова искались в одном поле , а даты в другом...