我用
更改了表格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,但每当我运行全文搜索查询时,我都没有行。任何人都可以帮助解决错误吗?
答案 0 :(得分:1)
不返回任何行并不意味着全文索引或搜索不起作用,它只表示找不到匹配的数据。这显示了数据或搜索表达式的问题,因此我们需要关注这些问题。
abc
,长度为3个字符。正如Boolean fulltext searches上的MySQL文档所说:最小和最大字长全文参数适用于 使用内置的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,但是您需要删除并重建全文索引。
abc
仅返回包含单词abc
的记录,但不会返回仅包含单词abcd
或babc
的记录。您可能没有在数据中搜索到的单词。您需要了解全文搜索与like '%abc%'
不一样。