Mysql ограничения полнотекстовой индексации?

StackOverflow https://stackoverflow.com/questions/609935

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

  

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

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

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

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

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

Выбор & # 8216; символов слова & # 8217; может не соответствовать вашим потребностям, и это сложно изменить. Например, поиск & # 8220; Терри & # 8221; не будет соответствовать & # 8220; Терри & # 8221 ;. В общем случае поддержка стемминга отсутствует, поэтому & # 8220; biscuit & # 8221; не соответствует & # 8220; печенье & # 8221; либо.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top