Mysql带加号的全文搜索

时间:2013-06-27 11:10:04

标签: mysql full-text-search match-against

我遇到了问题。

在我的MySql数据库中,我在产品表中有40000行。表格中有一个名为 T9Text 的列。 我的一行T9Text区域是这样的:

  

UNISNLS106B UNI.SNLS 106B SNLS-106B M.OT. 12V2DELİKMOTORCRAFTTİPİ   UNIPOINT 66-205 66205 F02Z-11390-A F02Z11390A   E90Z-11390-A E90Z11390A F4DZ-11390-A F4DZ11390A   F3VY-11390-A F3VY11390A E90Z-11390-A E90Z11390A FORD   ESCORT MERCURY TRACER FORD

对于自动完成过程,我在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

像这样,效果很好,只返回一行。

但我需要写下这样的条件:

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除外)

1 个答案:

答案 0 :(得分:1)

来自Boolean Full-Text Search docs;

  

星号用作截断(或通配符)运算符。 与其他运营商不同,它应附加到要受影响的字。如果单词以*运算符之前的单词开头,则匹配。

换句话说,布尔搜索不支持使用*运算符“包含”。