我遇到了一个问题。
在MySql数据库中,产品表中有40000行。表有一个名为T9Text的列。我的一行T9Text区域是这样的:
uninls106b UNI.SNLS 106B SNLS-106B M.OT.12V 2 DELïK摩托艇单点66-205 66205 F02Z-11390-A F02Z11390AE90Z-11390-A E90Z11390A F4DZ-11390-af4dz11390bF3VY-11390-A F3VY11390A E90Z-11390-A E90Z11390A福特护送汞示踪剂FORD
对于自动完成过程,我在数据库中运行了一个存储过程。它是这样的:
SELECT p.Code,
p.Name,
p.`T9Text`,
MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) AS SCORE
FROM product p
WHERE MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) >0
GROUP BY p.Name
ORDER BY SCORE DESC
像这样,它工作得很好,只返回一行。
但我需要写下我的条件如下:
MATCH (p.T9Text) AGAINST ('+*UNI* +*SNLS* +*106B*' IN BOOLEAN MODE) >0
使用上面的代码,它返回1877行。这就像加号不起作用
MATCH (p.T9Text) AGAINST ('+*UNISNLS106B*' IN BOOLEAN MODE) >0
MATCH (p.T9Text) AGAINST ('+*NISNLS106B*' IN BOOLEAN MODE) >0
第一个查询返回1行,但第二个查询返回0行。
所以,我有一个问题:在mysql全文搜索中,我不能使用+test表达式吗?如果没有,有没有办法做到这一点?(LIKE除外)
来自布尔全文搜索文档;
星号用作截断(或通配符)运算符与其他运算符不同,它应该被附加到要受影响的单词上。如果单词以*运算符前面的单词开头,则匹配。
换句话说,布尔搜索不支持使用*
运算符的"包含"。