使用匹配的mysql搜索短语与INsensitive案例

时间:2011-03-27 00:35:56

标签: php mysql full-text-search

为了介绍这个问题,mysql doc读取:

  

引用Match / Against子句中的字符串   区分大小写...

我的数据:

INSERT INTO table.col VALUES ('this is a custom phrase to match');

我的查询:

SELECT * FROM table
WHERE MATCH ( col1,..,col10 ) AGAINST ('"Custom Phrase"' IN BOOLEAN MODE)  

因为大小写而不匹配。


我正在寻找一种在INsensitive方式

的情况下使用此查询的方法

这些短语将与数据匹配的东西:

  • “自定义词组”
  • “自定义短语”
  • “CUSTOM PHRASE”
  • “CuStOm PhRAsE”

欢迎任何帮助,提前谢谢^^

3 个答案:

答案 0 :(得分:2)

阅读本文的结尾(http://bugs.mysql.com/bug.php?id=22343),其中说这是按设计的,因为您混合了不同的列类型。

如果您必须搜索列,请将它们全部转换(包括在转换期间指定排序规则)到MATCH左侧的文本类型。

答案 1 :(得分:1)

MySQL Reference表示默认情况下使用latin1非二进制排序规则不区分大小写。看起来您也可以使用collat​​e函数强制执行特定设置(不区分大小写或区分大小写)。

答案 2 :(得分:1)

Thanx求助

由于我面临另一个问题,全文索引不能超过16列(我需要匹配33列)我决定采用另一种方式:

(一种在全文搜索方面出现的解决方案)

  1. 我连接字符串中一行的所有列,我将其转换为小写。

  2. 我将此字符串保存在新添加的列(类型为longtext,其上带有全文索引)列中,该列专用于此FT搜索并在每次插入/更新查询后更新。

  3. 现在我需要将小写术语传递给AGAINST子句,同时使用BOOLEAN MODE。将所有数据设置为小写,区分大小写的搜索不再是问题。

    SELECT * FROM table WHERE MATCH(longtextcol) AGAINST('“小写短语”lowercaseword1 lowercaseword2')

  4. 感谢您的回复^^