3

我正在尝试进行全文搜索,我正在查询的数据库有很多 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中的全文搜索忽略“字符或数字。

不幸的是,我无法控制数据库数据,否则我会用其他东西替换双引号。还有其他解决方案吗?

4

1 回答 1

1

MySQL在索引时忽略某些字符,“我认为是其中之一。有几种方法可以更改默认字符设置,如此处所述

  • 修改 MySQL 源代码:在 myisam/ftdefs.h 中,查看 true_word_char() 和 misc_word_char() 宏。将“-”添加到这些宏之一并重新编译 MySQL。

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

  • 为索引列使用的字符集添加新的排序规则,并更改列以使用该排序规则。

我使用了第二种方法,这对我们有用。提供的页面在页面末尾的评论中有一个详细的示例(John Navratil 评论)。

在任何情况下,您都需要在更改设置后重建索引: REPAIR TABLE tbl_name QUICK;

于 2013-04-10T11:25:53.777 回答