mysql – 如何在搜索查询中允许使用连字符进行全文搜索

我有像“some-or-other”这样的关键字,其中连字符在搜索我的mysql数据库时很重要.我目前正在使用全文功能.

有没有办法逃脱连字符?
我知道一个选项是在myisam / ftdefs.h文件中注释#define HYPHEN_IS_DELIM,但不幸的是我的主机不允许这样做.还有其他选择吗?

编辑3-8-11
这是我现在的代码:

$search_input = $_GET['search_input'];
$keyword_safe = mysql_real_escape_string($search_input);
$keyword_safe_fix = "*'\"" . $keyword_safe . "\"'*";


$sql = "
    SELECT *,
        MATCH(coln1, coln2, coln3) AGAINST('$keyword_safe_fix') AS score
        FROM table_name
    WHERE MATCH(coln1, coln2, coln3) AGAINST('$keyword_safe_fix')
    ORDER BY score DESC
";
最佳答案
从这里http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

找到带有破折号或连字符的单词的一种解决方案是在BOOLEAN MODE中使用FULL TEXT SEARCH,并用双引号将连字符/破折号括起来.

或者从这里http://bugs.mysql.com/bug.php?id=2095

还有另一种解决方法.它最近被添加到手册中:

修改字符集文件:这不需要重新编译. true_word_char()宏
使用“字符类型”表来区分字母和数字与其他字母和数字
字符. .您可以编辑其中一个字符集XML中的内容
指定’ – ‘的文件是“字母”.然后使用给定的字符集
FULLTEXT索引.

没有尝试过我自己.

编辑:这里有一些来自http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html的更多信息

双引号(“”“)字符中包含的短语仅匹配字面上包含短语的行,因为它是键入的.全文引擎将短语拆分为单词并在单词的FULLTEXT索引中执行搜索.在MySQL 5.0.3之前,引擎然后对找到的记录中的短语执行子字符串搜索,因此匹配必须在短语中包含非单词字符.从MySQL 5.0.3开始,非单词字符不需要完全匹配:短语搜索只需要匹配包含与短语完全相同的单词并且顺序相同.例如,“测试短语”与MySQL 5.0.3中的“test,phrase”匹配,但之前不匹配.

如果短语不包含索引中的单词,则结果为空.例如,如果所有单词都是停用词或短于索引单词的最小长度,则结果为空.

转载注明原文:mysql – 如何在搜索查询中允许使用连字符进行全文搜索 - 代码日志