已关闭。此问题需要details or clarity。它目前不接受答案。
**想要改进这个问题吗?**添加细节,并通过editing this post澄清问题。
8年前就关闭了。
这篇文章昨天经过编辑并提交审阅。
Improve this question
假设我们有以下查询:
SELECT *
FROM companies
WHERE name LIKE '%nited'
它又回来了
名称
美联航
如何使用MySQL's full-text search编写提供类似结果的查询?
已关闭。此问题需要details or clarity。它目前不接受答案。
**想要改进这个问题吗?**添加细节,并通过editing this post澄清问题。
8年前就关闭了。
这篇文章昨天经过编辑并提交审阅。
Improve this question
假设我们有以下查询:
SELECT *
FROM companies
WHERE name LIKE '%nited'
它又回来了
名称
美联航
如何使用MySQL's full-text search编写提供类似结果的查询?
1条答案
按热度按时间piah890a1#
遗憾的是,您不能使用MySQL全文索引来做到这一点。您不能立即从索引中检索
'*nited states'
,因为左字符是索引中最重要的部分。但是,您可以搜索'United Sta*'
。在搜索句子中的整个单词时,MySQL的全文搜索性能最好--即使这有时也很糟糕。否则,我建议使用外部全文引擎,如Solr或Sphinx。我认为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个停用词!同样,如果不使用共享主机,这些设置相对容易修改,但如果你使用了,那么你会对一些默认设置感到恼火。