MySQL查询匹配相似单词/句子
我在一个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
我在Python里把my_string转换成大写,并在my_string的末尾加了一个“%”,但这似乎不是个好办法。这样也没有成功。=)
谢谢任何建议!
2 个回答
0
把你的字符排序方式改成 utf8_general_ci。这样一来,你的搜索就不会区分大小写了。
2
我看到你添加了FULLTEXT索引,我以为你已经知道MySQL的MATCH AGAINST语法了。
你可以试试这个:
SELECT id FROM papers
WHERE MATCH (title,booktitle,journal) AGAINST ('nFOIL: integrating Naïve Bayes and FOIL' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION);