【发布时间】:2013-06-24 20:39:29
【问题描述】:
我有一个问题。
在我的 MySql 数据库中,产品表中有 40000 行。表格有一个名为 T9Text 的列。 我的其中一个 T9Text 区域是这样的:
UNISNLS106B UNI.SNLS 106B SNLS-106B M.OT. 12V 2 DELİK MOTOR CRAFT TİPİ 联点 66-205 66205 F02Z-11390-A F02Z11390A E90Z-11390-A E90Z11390A F4DZ-11390-A F4DZ11390A F3VY-11390-A F3VY11390A E90Z-11390-A E90Z11390A 福特 护送水星示踪剂福特
对于自动完成过程,我在 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表达式吗? 如果没有,有没有办法做到这一点? (LIKE除外)
【问题讨论】:
-
您是否尝试将其转义为
\+? -
我认为问题出在
*——这只能用在词尾。 -
@DannyBeckett
MATCH (p.T9Text) AGAINST ('\+*NISNLS106B*' IN BOOLEAN MODE)没有返回任何内容
标签: mysql full-text-search match-against