搜索MYSQL数据库时处理撇号的最佳方法

时间:2018-01-26 01:36:51

标签: mysql full-text-search special-characters collation

我目前正在使用

MATCH column_name AGAINST ( 'search_term' IN NATURAL LANGUAGE MODE);

其中column_name是全文索引的。这适用于大多数情况,但如果用户搜索"items",我希望它从数据库中返回"short string items""short string item's"(假设两者都存在)。目前它正在搜索的方式将撇号视为一个字母,而不是像空格一样的单词。我看到一些建议,我创建了另一列基本上搜索友好的术语,在这种情况下我可以删除撇号,但我想知道是否有更好的方法,例如调整整理以不同的方式处理撇号?

1 个答案:

答案 0 :(得分:0)

我最终实现的解决方案首先在自然语言模式下搜索全文索引列,然后使用REPLACE和LIKE搜索搜索列:

export class showClassComponent {
    var classes = [ { name: 'workBookEntity', value: new WorkBookEntity() }]

    whenSubmitedInHtmlForm(className: string): void {
        let c = classes.filter(class => class.name == className)[0];
        if(c) {
            let ret = [];

            for (var key in c) {
                if (c.hasOwnProperty(key)) {
                    ret.push({ name: key, value: c[key] });
                }
            }

            return ret;
        }
    }

    // more code there
}

这似乎返回了我正在寻找的正确结果。

例如,如果用户搜索SELECT * FROM table WHERE MATCH column_name AGAINST ("search_term" IN NATURAL LANGUAGE MODE) OR REPLACE (column_name, "'", "") LIKE "%search_term%"; "items""item's""string items",则应同时返回"string items""short string item's"(再次假设存在于DB中。