您可能需要 MySQL 的全文搜索功能。本质上,您创建一个FULLTEXT
索引,然后使用MATCH() ... AGAINST
.
我不知道在 MySQL 中设置每个查询的搜索语言的工具,但这并不意味着不存在这样的支持。目前尚不清楚每个查询的语言设置是否是您的要求。
MySQL 的最新稳定版本支持对现代事务和崩溃安全的 InnoDB 表类型以及不安全的 MyISAM 表类型进行全文搜索。如果你的 MySQL 只在 MyISAM 上做 FTS,那么是时候升级了。5.6 支持 InnoDB 上的全文搜索。
或者,如果您真的无法升级,您可以将重要数据存储在 InnoDB 表中并运行定期查询来更新您用作物化视图的 MyISAM 表,仅用于全文搜索:
- 创建一个新的 MyISAM 表
INSERT INTO ... SELECT
将 InnoDB 表中的数据放入新的 MyISAM 表中
CREATE
新 MyISAM 表上的全文索引
DROP
您用于全文索引的旧 MyISAM 表;和
- 最后
ALTER TABLE ... RENAME
,新的 MyISAM 表以旧表的名称命名。
在删除旧表并重新创建新表之间,您将有一个非常短的窗口,在此期间全文索引不可用。您的数据在视图刷新之间也会过时和陈旧,尽管您可以使用触发器解决这个问题(我对 MySQL 的了解不够多)。如果您无法忍受这些限制,请升级到 5.6。
MySQL 的全文搜索提供了对停用词和其他调整的控制。这是一个可靠的产品,应该可以很好地完成工作。