1

我有一个问题。

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

UNISNLS106B UNI.SNLS 106B SNLS-106B M.OT. 12V 2Delïkotorcrafttİpİunipoint 66-205 66205 F02Z-11390-A F02Z11390A E90Z-111390-A E90Z11390A F4DZ-11390-A

对于自动完成过程,我在 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全文搜索中,我不能使用+测试表达式吗?如果没有,有没有办法做到这一点?(喜欢除外)

4

1 回答 1

1

来自布尔全文搜索文档

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

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

于 2013-06-27T11:28:19.377 回答