2009-03-04 6 views
4

Каковы ограничения или ошибки или препятствия или подводные камни?Ограничения на индексацию текста Mysql?

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

Каковы ваши впечатления?

ответ

4

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

+4

Вы можете обойти это, создав рабочую машину.Тип таблицы на подчиненном устройстве не должен совпадать с мастером, что означает, что ваш мастер innodb может иметь подчиненный myisam с полнотекстовым поиском. http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-diffengines.html – txyoji

+0

Спасибо за подсказку, txyoji, я не знал об этом. Может быть, нужно иметь в виду. –

+7

MySQL 5.6 добавляет полнотекстовую поддержку для таблиц innodb! –

4

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

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

14

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

Это, конечно, нет!

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

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

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

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

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

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

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

0

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