MySQL到PostgreSQL to_tsvector,@@和to_tsquery?

时间:2013-03-22 10:16:53

标签: mysql sql postgresql full-text-search

在PostgreSQL中,我们可以像这样搜索基于全文搜索的表 -

SELECT title
FROM pgweb
WHERE to_tsvector('english', body) @@ to_tsquery('english', 'friend');

来源 - http://www.postgresql.org/docs/current/static/textsearch-tables.html

我们如何在MySQL 5.5中进行类似的搜索,这在PostgreSQL中很容易完成?

1 个答案:

答案 0 :(得分:3)

您可能需要MySQL的full text search功能。基本上,您创建一个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的全文搜索提供了对停用词和其他调整的控制。它是一个可靠的产品,可以很好地完成这项工作。