MySQL匹配字段中的保留字

时间:2014-01-02 12:08:36

标签: php mysql sql

在我使用的数据库中,有几百万行客户。要搜索此数据库,我们使用与布尔表达式匹配。一切都很好,直到我们扩展到亚洲市场,客户突然出现“In”这个名字。我们的搜索算法无法通过名称找到此客户,我假设这是因为它是InnoDB保留字。我不想将我的查询转换为LIKE语句,因为这会将性能降低五倍。有没有办法在全文搜索中找到该名称?

生产中的查询很长,但不能正常运行的部分是:

SELECT
    `customer`.`name`
FROM
    `customer` 
WHERE
    MATCH(`customer`.`name`) AGAINST("+IN*+KYU*+YANG*" IN BOOLEAN MODE);

哦,并且innodb_ft_min_token_size变量设置为1,因为我们的客户“需要”能够通过中间的首字母进行搜索。

1 个答案:

答案 0 :(得分:2)

这不是保留字,but it is in the stopword list。您可以使用ft_stopword_file覆盖此内容,以提供自己的停用词列表。这些问题可能存在两个问题:(1)在改变它时,你需要重建你的全文索引(2)它是一个global变量:你不能在会话/位置/语言使用的基础上改变它,所以,如果你真的需要所有的话和在一个数据库中使用了很多不同的语言,提供一个空的几乎是唯一的方法,这可能会伤害你 像停用词列表一样使用的用途。