FULLTEXT无法正常工作

时间:2016-11-29 11:17:22

标签: mysql full-text-search

我用

更改了表格
ALTER TABLE store_products ADD FULLTEXT(product_name, product_desc);

现在我正在使用此查询

SELECT * FROM store_products WHERE MATCH(product_name, product_desc) AGAINST('abc' IN BOOLEAN MODE);

这是我的

product_id  bigint(20)  NO  PRI     auto_increment
product_name    varchar(150)    YES MUL     
product_desc    text    YES         
product_price   varchar(10) YES         
product_discount    varchar(10) YES         
product_views   bigint(20)  YES         
product_date    varchar(29) YES         
product_quantity    int(11) YES         
product_img_url varchar(250)    YES         
product_code    varchar(15) YES         
store_id    bigint(20)  YES         
product_category    int(11) YES         
product_image1  varchar(150)    YES         
product_image2  varchar(150)    YES         
product_image3  varchar(150)    YES         
sale_id bigint(20)  YES     0   
product_image4  varchar(150)    YES 

引擎

MyISAM and table_collation utf8_general_ci

我正在运行MySQL 5.7,但每当我运行全文搜索查询时,我都没有行。任何人都可以帮助解决错误吗?

1 个答案:

答案 0 :(得分:1)

不返回任何行并不意味着全文索引或搜索不起作用,它只表示找不到匹配的数据。这显示了数据或搜索表达式的问题,因此我们需要关注这些问题。

  1. 示例搜索表达式为abc,长度为3个字符。正如Boolean fulltext searches上的MySQL文档所说:
  2.   

    最小和最大字长全文参数适用于   使用内置的FULLTEXT解析器和MeCab创建的FULLTEXT索引   解析器插件。 innodb_ft_min_token_size和innodb_ft_max_token_size   用于InnoDB搜索索引。 ft_min_word_len和   ft_max_word_len用于MyISAM搜索索引。

    ft_min_word_len的默认值为4个字符,因此搜索中将忽略abc。这可能是您没有任何比赛的第一个原因。您可以将限制降低到3,但是您需要删除并重建全文索引。

    1. 搜索abc仅返回包含单词abc的记录,但不会返回仅包含单词abcdbabc的记录。您可能没有在数据中搜索到的单词。您需要了解全文搜索与like '%abc%'不一样。