Игнорирование сущности HTML для амперсанда в полнотекстовом поиске MySQL - PullRequest
4 голосов
/ 27 августа 2010

У меня много данных, которые вводятся в записи с сущностью HTML &. В результате полнотекстового поиска по слову «amp» будут показаны записи, содержащие &, что крайне нежелательно.

Предположительно, это потому, что MySQL игнорирует '&' и ';'. Так кто-нибудь знает, каким образом в MySQL заставить его обрабатывать специальные символы как часть слова, чтобы мой поиск «amp» не включал в себя все результаты с &, в идеале без какая-то форма подзапроса или дополнительное предложение WHERE?

Мое решение до сих пор (еще не реализовано) - декодировать объекты в INSERT и перекодировать их при отображении в Интернете. Это было бы хорошо, но добавляет некоторые накладные расходы на все, что я хотел бы избежать, если это возможно. Также это хорошо работает для новых записей, но мне нужно было бы задним числом поставить около 7 миллионов записей ... что я вроде бы не хочу иметь , если я могу помочь.

-

Я обновил свой my.cnf файл:

ft_stopword_file = /etc/mysql/custom-stopwords

Должны ли быть какие-либо специальные разрешения для этого файла?

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

Ваша «расшифровка сущностей HTML в INSERT и кодирование их при выводе» - ваш лучший выбор, который позаботится и о таких вещах, как ".Вы, вероятно, захотите убрать теги HTML слишком далеко, чтобы MySQL не мог найти вещи в значениях атрибутов.

Если скорость и форматирование являются проблемой, вы можете поместить текстовую / простую версию в отдельный столбеци поместите свой полнотекстовый индекс на это и позвольте всему остальному использовать версию text / html.Конечно, вам придется поддерживать оба столбца одновременно, и ваши требования к хранилищу возрастут;OTOH, этот подход позволил бы вам добавлять теги, имена авторов и другие дополнительные фрагменты интересных данных в индекс, не портя отображаемый текст.

В то же время вы перестраивали свой полнотекстовый индекс последобавили ft_stopword_file в ваш конфигурационный файл?AFAIK, стоп-слова применяются на пути к указателю, а не во время обращения к указателю.

0 голосов
/ 01 октября 2010

Вы добавили его в файл стоп-слов, и он не работает?Похоже, что либо ошибка в MySQL, либо ваш список стоп-слов не используется.Вы просмотрели это ?Цитата:

Возможны ложные попадания или пропуски при поиске по стоп-словам, если файл или столбцы стоп-слов, используемые для полнотекстовой индексации или поиска, имеют набор символов или сопоставление, отличные от character_set_server или collation_server.

Чувствительность к регистру при поиске по стоп-словам зависит от параметров сортировки сервера.Например, поиски нечувствительны к регистру, если параметры сортировки - latin1_swedish_ci, тогда как поиски чувствительны к регистру, если параметры сортировки - latin1_general_cs или latin1_bin.

Может ли какая-либо из этих возможностей повлиять на ввод вашего ключевого слова и не читается

0 голосов
/ 27 августа 2010

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

.
...