MySQL Match Against 部分工作的精确短语

MySQL Match Against for exact Phrase working partially

我有一个 table,其中我在名为 item_desc 的列中创建了全文索引。

假设 table 包含三个记录,其中列 item_desc 包含“氯化钠”,如下所示:

  1. 氯化钠标准溶液
  2. 5425 氯化钠 100u
  3. Qty氯化钠溶液

我有一个以下的(匹配,反对)查询,它应该是 return 行,完全匹配记录,但它 return 仅针对 Sodium 的前两行Chloride,如果它与 QtySodium Chloride 等另一个词连接,则不考虑该短语。

SELECT * FROM tblhugedata WHERE MATCH(Item_desc) AGAINST('"*Sodium Chloride*"' IN BOOLEAN MODE);

按照 LIKE 查询 return 的预期结果,但我只想使用全文索引。

SELECT * FROM tblhugedata WHERE Item_desc like '%SODIUM CHLORIDE%';

有没有办法通过匹配提取这样的结果,反对的方式。

删除星号。 FULLTEXT not 允许 leading 通配符。也就是说,无法让 MATCHQtySodium 匹配 Sodium

我认为“QtySodium”是“垃圾”并向数据提供者投诉。

这是一个在一些 情况下有效的拼凑方法:

WHERE WHERE MATCH(Item_desc) AGAINST('Sodium Chloride' IN BOOLEAN MODE)
  AND Item_desc LIKE '%SODIUM CHLORIDE%'

这样,它将有效地向下过滤到具有 “钠”或“氯化物”的行,然后检查这些行是否恰好包含子字符串“氯化钠”。这将匹配您的 3 个示例,但可能与其他一些示例不匹配。

SELECT * 来自 tblhugedata WHERE MATCH(Item_desc) AGAINST( 'Sodium Chloride' 在自然语言模式下);

InnoDB 全文搜索不支持在单个搜索词上使用多个运算符。