Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨多个列的MySQL全文查询_Mysql_Full Text Search_Full Text Indexing_Fulltext Index - Fatal编程技术网

跨多个列的MySQL全文查询

跨多个列的MySQL全文查询,mysql,full-text-search,full-text-indexing,fulltext-index,Mysql,Full Text Search,Full Text Indexing,Fulltext Index,在MySQL中使用全文搜索时,有一个问题让我感到困惑。我正在运行MySQL 5.1.67。这是我的简化表格: CREATE TABLE `contact_info` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `first_name` varchar(25) DEFAULT NULL, `last_name` varchar(35) DEFAULT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `idx_ft_

在MySQL中使用全文搜索时,有一个问题让我感到困惑。我正在运行MySQL 5.1.67。这是我的简化表格:

CREATE TABLE `contact_info` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(25) DEFAULT NULL,
`last_name` varchar(35) DEFAULT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `idx_ft_first_name_last_name` (`first_name`,`last_name`)
) ENGINE=MyISAM CHARSET=latin1;
我想在一个大约有500万行的表中查询名字和姓氏。如上表所示,名字和姓氏在单独的列中。我想得到所有的行的名字和姓氏是“约翰·史密斯”。我不想让所有的人都以约翰或史密斯为姓。我知道我可以这样做,但因为用户有时选择将全名存储在first_name列或last_name列中,所以我正在尝试设置全文搜索

SELECT ci.first_name,ci.last_name FROM contact_info ci
WHERE  ci.first_name LIKE 'John%' AND ci.last_name LIKE 'Smith%' 
当我运行查询时,强制它使用主键索引,然后它会为John Smith返回几百条记录,这正是我想要的,但速度很慢,大约需要5秒钟。以下是查询:

SELECT ci.first_name,ci.last_name FROM contact_info ci USE INDEX(PRIMARY)
WHERE MATCH(ci.first_name,ci.last_name) AGAINST ('"John Smith"' IN BOOLEAN MODE);
当我使用优化器喜欢的索引运行查询时,它不会返回任何内容

SELECT ci.first_name,ci.last_name FROM contact_info ci USE INDEX(idx_ft_first_name_last_name)
WHERE MATCH(ci.first_name,ci.last_name) AGAINST ('"John Smith"' IN BOOLEAN MODE);

为什么它没有返回任何东西?不能用这样的全文索引跨两列查询“John Smith”吗?

全文搜索的文档说明:

包含在双引号(“”)字符内的短语匹配 仅包含按字面形式键入的短语的行 全文引擎将短语拆分为单词并在中执行搜索 单词的全文索引。不需要输入非单词字符 完全匹配:短语搜索只要求匹配项包含 与短语完全相同的单词和顺序。例如 例如,“测试短语”匹配“测试,短语”

您已经将短语
“John Smith”
放在双引号中。但是您没有任何一列包含该短语:它是跨列拆分的

试着去掉双引号


试试('John AND Smith'处于布尔模式),看看你得到了什么。这可能会有用。而且,全文应该将两个单词匹配的记录的排名高于只有一个匹配的记录。

谢谢你的回答。当我删除双引号时,它会很快返回结果(