Mysql ограничения полнотекстовой индексации? - PullRequest
4 голосов
/ 04 марта 2009

Каковы ограничения или ошибки, антипаттерны или подводные камни?

Это выглядит довольно привлекательно, по-видимому, вы можете создать поисковую систему практически без работы. Но без проблем не может быть ...

каков ваш опыт?

Ответы [ 4 ]

14 голосов
/ 04 марта 2009

не может быть без проблем ...

Конечно, нет!

Любой поисковый запрос, состоящий исключительно из заблокированных слов, будет молчаливо проваливаться. Слова могут быть заблокированы из-за ограничений минимальной / максимальной длины и / или файла стоп-слов.

Я обнаружил, что файл стоп-слов по умолчанию слишком агрессивен, он препятствовал многим допустимым поискам. Кроме того, минимальная длина по умолчанию 4 часто использовалась для сокращений, которые люди могли бы искать. Я уменьшил ft_min_word_len до 3 и полностью удалил стоп-лист (ft_stopword_file = ''). Док: http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

Вы также можете проверить поисковый запрос, чтобы убедиться, что он содержит только <4-буквенные слова, и в этом случае вернуться к поиску LIKE. Нет такого простого способа обойти стоп-лист на уровне приложения. </p>

Выбор «словесных символов» может не соответствовать вашим потребностям, и его сложно изменить. Например, поиск «Терри» не будет совпадать с «Терри». В целом, поддержка стемминга отсутствует, поэтому «бисквит» также не будет соответствовать «бисквитам».

Наконец, как упоминалось в cg, InnoDB не поддерживается. В наше время вы не хотите помещать все свои данные в таблицу MyISAM.

Если у вас есть свободное хранилище, вы можете поместить основную каноническую версию данных в таблицу InnoDB, а затем создать отдельную таблицу MyISAM, содержащую копию содержимого свободного текста, исключительно для использования в качестве searchbait. Вы должны обновить обе таблицы при внесении изменений, но если таблица MyISAM теряет целостность, то, по крайней мере, вы теряете только возможность поиска по соответствующим строкам, а не суммирование реальных данных и получение ошибок приложения.

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

4 голосов
/ 04 марта 2009

На мой взгляд, самым большим недостатком является то, что полнотекстовое индексирование MySQL ограничено таблицами MyISAM. В отличие от таблиц InnoDB, в них отсутствуют многие важные функции, например сделки.

4 голосов
/ 04 марта 2009

Для больших таблиц вам потребуется увеличить размер буфера и ограничение кеша в файле конфигурации MySQL.

Кроме того, столбцы MATCH (), используемые в поиске, должны совпадать со столбцами в индексе.

0 голосов
/ 04 июля 2011

В дополнение к очень хорошему ответу Бобинса, в документации MySQL есть статья, в которой говорится об ограничениях полнотекстового текста. Надеюсь это поможет. http://dev.mysql.com/doc/refman/5.0/en/fulltext-restrictions.html (Олафур Вааге уже говорил об одном из них)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...