【问题标题】:Mysql Full-text search with plus signMysql全文搜索带加号
【发布时间】: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


【解决方案1】:

来自Boolean Full-Text Search docs

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-07-03
    相关资源
    最近更新 更多