2013-04-10 99 views
3

我试图做一个全文搜索,我查询的数据库有很多LCD屏幕尺寸,例如32“。 我需要做一个全文搜索,因为搜索短语可能很复杂,我们从一个LIKE比较开始,但它并没有削减它。MYSQL全文搜索的数字和字符被忽略?

继承人我们得到了什么。

SELECT stock_items.name AS si_name, 
     stock_makes.name AS sm_name, 
     stock_items.id AS si_id 
FROM stock_items 
LEFT JOIN stock_makes ON stock_items.make = stock_makes.id 
WHERE MATCH (stock_items.name, 
      stock_makes.name) AGAINST ('+32"' IN BOOLEAN MODE) 
    AND stock_items.deleted != 1 

通过此搜索,我们得到0个结果。虽然32“在域中出现多次 我们修改了mysql配置,以允许我们搜索3个或更多字符(而不是默认的四个字符),并且像+ NEC这样的搜索工作正常。或者a)在mysql中全文搜索忽略“字符或数字。

不幸的是,我没有任何控制数据库数据,或者我会用别的东西替换双引号。 任何其他解决方案?

回答

1

的MySQL索引时忽略cirtain人物,“就是其中之一我相信 有更改默认字符设置为几个方面描述here

  • 修改MySQL的源:在MyISAM中/ ftdefs。 h),请参阅true_word_char()和misc_word_char()宏。将' - '添加到其中一个宏并重新编译MySQL。

  • 修改字符集文件:这不需要重新编译true_word_char()宏使用“字符类型“表来区分字母和数字字符。 。您可以在字符集XML文件之一中编辑数组的内容以指定“ - ”是“字母”。然后使用给定的字符集作为FULLTEXT索引。

  • 为索引列使用的字符集添加新的归类,并更改列以使用该归类。

我用第二种方法,并为我们工作。 The provided page在页面末尾的评论中有一个详细的例子(John Navratil评论)。

在你需要修改设置后重建索引任何情况下: REPAIR TABLE tbl_name QUICK;

+0

重新编译是不是我们的选择可惜还是我们刚刚做到这一点。你可以提供任何有关如何完成第二个的见解,链接http://dev.mysql.com/doc/refman/5.0/en/character-arrays.html建议实际上目录/ sql/share/charsets /实际上是一个源文件目录...所以不知道在哪里编辑字符集?有任何想法吗 ? – chip 2013-04-10 22:28:20

+0

修改字符集文件不需要编译。在这篇文章的评论中有一个详细的例子:http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html – vadchen 2013-04-11 06:01:13

+0

我使用的是UTF8,没有一个charsets文件夹中的UTF8.xml。 查看charsets文件夹中的index.xml文件,有一个针对utf8 编译的的标志,所以猜测它没有charset文件夹。除了更改表格的字符集或重新编译mysql之外,还有其他选项吗? – chip 2013-04-11 10:48:36