MySQL запрос на совпадение похожих слов / предложений - PullRequest
0 голосов
/ 20 марта 2011

У меня есть таблица в базе данных MySQL, которая имеет такую ​​структуру:

CREATE TABLE `papers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
`booktitle` varchar(300) COLLATE utf8_bin DEFAULT NULL,
`journal` varchar(300) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `title_fulltext` (`title`),
FULLTEXT KEY `booktitle_fulltext` (`booktitle`),
FULLTEXT KEY `journal_fulltext` (`journal`)
) ENGINE=MyISAM AUTO_INCREMENT=1601769 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

Теперь я знаю, что в заголовке столбца, где-то в миллионах строк, есть строка, содержащая строку

nFOIL: Integrating Naïve Bayes and FOIL.

Я хочу найти

my_string = "nFOIL: integrating Naïve Bayes and FOIL"

и найти правильный ряд.Вы видите, что это должен быть поиск без учета регистра, и точка в конце отсутствует в запросе.Как мне это реализовать?

Я попытался

SELECT id FROM papers WHERE UPPER(title) LIKE %s

и преобразовал my_string в верхний регистр в python и поставил «%» в конце my_string, но это не очень хорошоспособ справиться с этим.Это тоже не сработало.=)

Спасибо за любые предложения!

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Я вижу, вы добавили индексы FULLTEXT, хотя я уже знал о синтаксисе MATCH AGAINST в MySQL.

Вы должны попробовать

SELECT id FROM papers 
WHERE MATCH (title,booktitle,journal) AGAINST ('nFOIL: integrating Naïve Bayes and FOIL' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION);
0 голосов
/ 20 марта 2011

Измените ваш подбор в utf8_general_ci.Таким образом, ваши поиски будут без учета регистра.

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