我有个问题。
在MySql数据库中,product表中有40000行。表有一个名为T9Text的列。
我的T9行文本区域之一如下:
UNISNLS106B单号106B单号106B M.OT。12V 2 DELİK摩托艇TİPİ
单点66-205 66205 F02Z-11390-A F02Z1130A
E90Z-11390-A E90Z1130A F4DZ-11390-A F4DZ11390A
F3VY-11390-A F3VY11390A E90Z-11390-A E90Z1130A福特
护送水星追踪福特
为了自动完成进程,我在db中运行了一个存储过程。就像这样:

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

像这样,它工作得很好,只返回一行。
但我需要这样写我的where条件:
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表达式吗?
如果没有,有什么办法吗?(同类除外)

最佳答案

Boolean Full-Text Search docs开始;
星号用作截断(或通配符)运算符。与其他运算符不同,它应该附加到要受影响的单词中。如果单词以*运算符前面的单词开头,则单词匹配。
换句话说,布尔搜索不支持使用*运算符“contains”。

09-11 03:07