#mysql #match-against
#mysql #сопоставление с
Вопрос:
У меня есть эта база данных (MySQL версии 5.7)
DROP TABLE IF EXISTS test3_sim;
CREATE TABLE test3_sim (
ID INT not null,
texto VARCHAR(1024)
);
ALTER TABLE test3_sim ADD FULLTEXT(texto);
INSERT INTO test3_sim (id,texto) VALUES (1,'NA');
INSERT INTO test3_sim (id,texto) VALUES (2,'NA');
INSERT INTO test3_sim (id,texto) VALUES (3,'DUPLICATE');
INSERT INTO test3_sim (id,texto) VALUES (4,'OTH');
INSERT INTO test3_sim (id,texto) VALUES (5,'NOP');
INSERT INTO test3_sim (id,texto) VALUES (6,'NOP');
INSERT INTO test3_sim (id,texto) VALUES (7,null);
Я выполняю некоторый поиск с помощью полнотекстового синтаксиса в ЛОГИЧЕСКОМ РЕЖИМЕ, ища другое совпадение значений.
Я не могу понять, почему это приводит к сбою при поиске термина ‘NA’:
Результат этого запроса пуст:
SELECT id, texto
FROM test3_sim
WHERE MATCH (texto) AGAINST ('NA' IN BOOLEAN MODE)
AND texto is not null
Но оно должно выводить первые 2 строки.
Все работает нормально для поиска ‘DUPLICATE’, ‘OTH’, ‘NOP’.
Есть ли конкретная причина, по которой запрос завершается ошибкой? Демонстрация здесь
Комментарии:
1. Не обращаясь к вашей конкретной проблеме, я замечу, что трудно протестировать ПОЛНЫЙ текст на таком крошечном наборе данных.
2. Для FULLTEXT по умолчанию
ft_min_word_len
установлено значение 3, что означает, что он не будет индексировать строки меньшей длины.
Ответ №1:
Согласно комментарию @Raymond Nijaland, это связано с тем, что для FULLTEXT по умолчанию установлено значение ft_min_word_len равное 3, что означает, что он не будет индексировать строки с длиной, которая меньше