Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > Полнотекстовый поиск match against не хочет работать полноценно


Автор: alex.styopin 27.06.18, 13:37
Добрый день.
Есть поле в таблице:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
      c_number CHAR (20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL

Для него создан индекс FULLTEXT.
Делаю поиск по нему поиск. Текст в нем латиницей. Если делаю поиск с начала строки, то есть если запрос такой:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    WHERE MATCH (c_number) AGAINST ('ABCD*' IN BOOLEAN MODE)

То отдает правильную выборку. Но если поиск не с начала строки:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    WHERE MATCH (c_number) AGAINST ('*BCD*' IN BOOLEAN MODE)

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

Версия mysql 5.7.

В чем может быть проблема? Уже кучу всего перепробовал, ничего не помогает.

Автор: Gonarh 27.06.18, 14:18
WHERE c_number LIKE '%BCD%'

Автор: alex.styopin 02.07.18, 05:00
Gonarh
LIKE не для FULLTEXT, а для BETREE. Плюс, если с помощью LIKE делать выборку не с начала строки, то он не использует индексы и поиск занимает очень много времени.

Автор: alex.styopin 02.07.18, 06:38
Gonarh
Беру свои слова обратно) Хоть и это и перечет документации, но на таблице под движком InnoDB, с индексом FULLTEXT, для поля CHAR, LIKE '%ABC%' работает на ура!

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)