背景
嘿我正在使用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%'
它向我展示了两个我期待的结果
问题:
当我向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')
我不知道我做错了什么,非常感谢帮助。
答案 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'价值太短了。