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

时间:2013-12-19 10:51:12

标签: mysql full-text-search wildcard

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

  

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


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

1 个答案:

答案 0 :(得分:20)

不幸的是,您无法使用MySQL全文索引执行此操作。您无法立即从索引中检索'*nited states',因为左侧字符是索引中最重要的部分。但是,您可以搜索'United Sta*'

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

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

你可以回到MySQL的LIKE子句,但是再次运行LIKE '%nited states'LIKE '%nited Stat%'之类的查询也会因性能而受到影响,因为它无法使用前几个字符。 'United Sta%''Unit%States'是可以的,因为索引可以用于第一批已知字符。

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