MySQL全文搜索中的通配符搜索

har*_*y34 9 mysql full-text-search wildcard

如何使用全文搜索在MySQL中查询,以便我们可以获得如下的结果:

nited变得团结起来,而oogle得到谷歌


我们可以使用LIKE运算符: %nited and %oogle

The*_*ver 21

不幸的是,你不能使用MySQL全文索引来做到这一点.您无法'*nited states'立即从索引中检索,因为左侧字符是索引中最重要的部分.但是,您可以搜索'United Sta*'.

// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

当在句子中搜索整个单词时,MySQL的全文性能最佳 - 即使有时也会很糟糕.否则,我建议使用像SolrSphinx这样的外部全文引擎.我认为Sphinx允许使用前缀和后缀通配符,而不确定其他通配符.

你可以回到MySQL的LIKE子句,但同样,运行像LIKE '%nited states'或的查询LIKE '%nited Stat%'也会受到性能的影响,因为它不能在前几个字符上使用索引.'United Sta%'并且'Unit%States'可以使用索引来对抗第一批已知字符.

使用MySQL的全文索引的另一个相当重要的警告是停用词列表和最小字长设置.例如,在共享托管环境中,您将被限制为大于或等于4个字符的单词.所以搜索'Goo'来获得'Google'会失败.停止单词列表也不允许常见的单词,如'和','可能'和'外部' - 实际上,共有548个停用单词!同样,如果不使用共享主机,这些设置相对容易修改,但如果你是,那么你会对一些默认设置感到恼火.