MYSQL全文搜索数字和字符被忽略?

时间:2013-04-10 11:07:57

标签: mysql

我正在尝试进行全文搜索,我正在查询的数据库有很多LCD屏幕尺寸。例如32“。 我需要进行全文搜索,因为搜索短语可能很复杂,我们从LIKE比较开始,但它没有削减它。

这是我们得到的。

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个或更多字符(而不是默认的4个),并且像+ NEC这样的搜索工作正常。

我猜这里要么是a)mysql中的全文搜索忽略了“字符或者数字。

遗憾的是我没有对数据库数据的任何控制,或者我用其他东西替换双引号。 还有其他解决方案吗?

1 个答案:

答案 0 :(得分: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;