Восстановление mysql чувствительного к регистру полнотекстового поиска после удаления индекса - PullRequest
0 голосов
/ 19 февраля 2020

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

Вот пример.

Я создаю таблицу и устанавливаю набор символов на utf8_bin. Я также добавляю полнотекстовый индекс:

CREATE TABLE testtable (
             `Date` timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
             `Headline` VARCHAR(256) CHARACTER SET utf8 NOT NULL,
             `Description` text CHARACTER SET utf8 NOT NULL,
            PRIMARY KEY (`Headline`)
            );
ALTER TABLE testtable CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE testtable ADD FULLTEXT (Headline);

Я добавляю несколько фиктивных данных:

INSERT INTO testtable (Headline,Description) VALUES ("the story of how an apple fell from the tree",""); 
INSERT INTO testtable (Headline,Description) VALUES ("Apple did something blah",""); 

Теперь, если я ищу:

SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('apple' IN BOOLEAN MODE);
'2020-02-19 17:16:05', 'the story of how an apple fell from the tree'

и

SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('Apple' IN BOOLEAN MODE);
'2020-02-19 17:18:38', 'Apple did something blah'

Отлично, это работает, и это результат, который я хочу .

Теперь давайте отбросим индекс, заново добавим его и попробуем еще раз:

DROP INDEX Headline ON testtable;
#ALTER TABLE testtable CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; # I also tried this with no difference
ALTER TABLE testtable ADD FULLTEXT (Headline);
SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('Apple' IN BOOLEAN MODE);

Дает null в качестве ответа, но поиск apple возвращает обе строки.

Итак, вопрос в том, что здесь происходит, и что более важно, как мне вернуть таблицу в прежнее состояние: чувствительный к регистру полнотекстовый индекс, который дает мне отдельные результаты для Apple и apple?

(с использованием Mysql 5.7, с движком InnoDB)

Спасибо за помощь!

1 Ответ

0 голосов
/ 19 февраля 2020

https://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html

По умолчанию поиск выполняется без учета регистра. Чтобы выполнить полнотекстовый поиск с учетом регистра, используйте двоичное сопоставление для индексированных столбцов. Например, столбцу, в котором используется набор символов latin1, можно назначить сопоставление latin1_bin, чтобы сделать его чувствительным к регистру для полнотекстового поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...