我正在尝试进行全文搜索,我正在查询的数据库有很多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中的全文搜索忽略了“字符或者数字。
遗憾的是我没有对数据库数据的任何控制,或者我用其他东西替换双引号。 还有其他解决方案吗?
答案 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;