Справочная информация:полнотекстовый поиск не работает на двух колонках
Эй, я использую MySQL 5.6.17 InnoDB
, я прочитал на сайте тузд что FULLTEXT теперь доступна для InnoDB в 5.6+ версии. так что я не должен меняться от InnoDB к MYISAM Here is the link я изменил два моих столбцов таблицы для поиска FULLTEXT, используя следующий запрос
ALTER TABLE `es_officers` ADD FULLTEXT Index_officer_name (es_officer_name)
ALTER TABLE `es_officers` ADD FULLTEXT Index_officer_fname (es_officer_fname)
Измененная таблица в отношении информации схемы:
Тогда я проверяется в моей информационной схеме, если измененные столбцы таблицы зарегистрированы или не выполнив следующий запрос
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM statistics
WHERE index_type LIKE 'FULLTEXT%'
Он показал мне два exacttly результаты, которые я ожидал
Проблема:
, когда я написать запрос MATCH жалом против двух столбцов дает мне ошибку
SELECT * FROM `es_officers` WHERE MATCH (es_officer_name, es_officer_fname) AGAINST ('abc')
#1191 - Can't find FULLTEXT index matching the column list
НО:
когда Я пытаюсь запросить столбцы отдельно, как показано ниже. абсолютно штраф
SELECT * FROM `es_officers` WHERE MATCH (es_officer_name) AGAINST ('abc')
SELECT * FROM `es_officers` WHERE MATCH (es_officer_fname) AGAINST ('abc')
Я не знаю, что это я делаю неправильно, помощь очень ценится.
ОК, так что если я делаю ALTER TABLE 'es_officers' ADD FULLTEXT Index (es_officer_name, es_officer_fname), и если минимальная длина слова равна 4, которая по умолчанию для mysql fulltext, это должно работать правильно? также я должен задать вам несколько вещей – Wcan
1: Я пытался избежать следующего запроса, потому что у меня около 20 столбцов в одной таблице, и мне приходилось сопоставлять строку через каждый столбец, но в случае FULLTEXT моя минимальная длина слова 4, и если я дам 2, это не сработает. SELECT * FROM 'es_officers' ГДЕ es_officer_name LIKE '% ABC%' ИЛИ es_officer_fname LIKE '% ABC%' ИЛИ es_officer_EDFA LIKE '% ABC%' Я должен написать этот "LIKE '% ABC'" часть в 20 раз, есть ли способ избежать этого? – Wcan
вы можете изменить минимальную длину. он настраивается. вам просто нужно перестроить индексы после изменения пределов длины. и поскольку 'как% ...%' запросы не могут использовать индексы в любом случае, вы можете взломать более простую версию, такую как 'concat (field1, field2 и т. д.) LIKE '% abc%''. –