MySQL全文搜索中的通配符搜索[已关闭]

0qx6xfy6  于 2022-12-10  发布在  Mysql
关注(0)|答案(1)|浏览(148)

已关闭。此问题需要details or clarity。它目前不接受答案。
**想要改进这个问题吗?**添加细节,并通过editing this post澄清问题。

8年前就关闭了。
这篇文章昨天经过编辑并提交审阅。
Improve this question
假设我们有以下查询:

SELECT *
FROM companies
WHERE name LIKE '%nited'

它又回来了
名称

美联航
如何使用MySQL's full-text search编写提供类似结果的查询?

piah890a

piah890a1#

遗憾的是,您不能使用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也不允许使用像‘and’,‘Mayse’和‘Outside’这样的常用词--事实上,总共有548个停用词!同样,如果不使用共享主机,这些设置相对容易修改,但如果你使用了,那么你会对一些默认设置感到恼火。

相关问题