2010-05-26 4 views
1

Я использую php + mysql с полным текстовым индексом. У меня есть следующее содержание в поле, которое я хочу найти:mysql полнотекстовый поиск и специальные символы

«Привет, это тест!».

«Привет, я тоже тест!»

Когда я ищу «привет», он находит обе строки. Но он должен найти только первый ряд - по крайней мере, пока я не поискаю «привет%». Двоеточие, кажется, не воспринимается как «нормальный» характер.

+0

Почему бы не найти «Hello: it's test» для «hello:»? Если вы хотите, чтобы поиск был нечувствительным к регистру, вы должны использовать двоичную сортировку для индексированных столбцов (заканчивающихся на * _bin *) – Konerak

+0

@Konerak: Но двоичная сортировка сделает поиск случайным * чувствительным * - и поиск ben уже нечувствителен к регистру. Он просто ищет способ поиска слов. – pinkgothic

+0

Почему вы просто не возвращаете значение null, если запрос содержит специальные символы? – Amarghosh

ответ

0

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

У меня есть таблица с двумя входами:

Table: Test 
ID Note 
-- --------- 
1 Hello: it's a test! 
2 Hello i am also a test! 

Если я запускаю свой первый поиск SELECT * FROM test t WHERE Note LIKE "Hello:" я получаю 0 строк в результате, как и следовало ожидать, потому что в этом случае LIKE ищет точное совпадение со всей области ,

Если я запустить второе заявление SELECT * FROM test t WHERE Note LIKE "Hello:%" я получаю один ряд назад:

ID Note 
-- --------- 
1 Hello: it's a test! 

Вы уверены, что вы настроили правильный стол для FULLTEXT индексации?

Прежде всего, ваш настольный компьютер должен быть таблицей MyISAM. Затем вам нужно создать индекс (индексы) для вашего столбца (в моем случае Note) типа FULLTEXT.

Смежные вопросы