MySQL查询匹配相似的单词/句子

时间:2011-03-20 18:59:54

标签: python mysql search full-text-search

我在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 :(得分:2)

我看到你添加了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);

答案 1 :(得分:0)

在utf8_general_ci中更改整理。 这样,您的搜索将不区分大小写。