FULLTEXT搜索不在两列上工作

时间:2016-06-21 16:44:37

标签: mysql node.js

背景

嘿我正在使用MySQL 5.6.17 InnoDB,我在mysql网站上看到FULLTEXT现在可用于5.6+版本的InnoDB。所以我不必从InnoDB更改为MyISAM Here is the link我使用以下查询更改了我的两个表列以进行FULLTEXT搜索

ALTER TABLE `es_officers` ADD FULLTEXT Index_officer_name (es_officer_name)
ALTER TABLE `es_officers` ADD FULLTEXT Index_officer_fname (es_officer_fname)

在信息架构中注册的已更改表:

然后我通过运行以下查询

检查了我的信息架构是否已注册更改的表列
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM statistics
WHERE index_type LIKE 'FULLTEXT%'

它向我展示了两个我期待的结果

Information Schema results

问题:

当我向MATCH写一个查询反对两列时,它给了我一个错误

SELECT * FROM `es_officers` WHERE MATCH (es_officer_name, es_officer_fname) AGAINST ('abc')

#1191 - Can't find FULLTEXT index matching the column list 

BUT:

当我尝试单独查询列时,如下所示,它可以正常工作

SELECT * FROM `es_officers` WHERE MATCH (es_officer_name) AGAINST ('abc')

SELECT * FROM `es_officers` WHERE MATCH (es_officer_fname) AGAINST ('abc')

我不知道我做错了什么,非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

倍数问题:

您有两个单独的全文索引,每个索引都覆盖一个字段。您有WHERE MATCH (es_officer_name, es_officer_fname)作为查询,这需要包含两个字段的 SINGLE 索引。 MySQL不会为此查询使用两个单独的索引 - 它不能。这不是全文索引的工作原理。您需要添加alter ... fulltext (es_officer_name, es_officer_fname)

即便如此,abc也属于默认minimum word length并且不会被编入索引。

答案 1 :(得分:0)

此外,您可以尝试以下方式:

SELECT * FROM es_officers
WHERE MATCH es_officer_name AGAINST ('abc') + MATCH es_officer_fname AGAINST ('abc')

尽管如Marc B所说,' abc'价值太短了。