MySQL MATCH() AGAINST() 等效于 SQL Server

Posted

技术标签:

【中文标题】MySQL MATCH() AGAINST() 等效于 SQL Server【英文标题】:MySQL MATCH() AGAINST() Equivalent for SQL Server 【发布时间】:2012-06-23 17:12:09 【问题描述】:

有没有办法可以将这个全文搜索查询从 mysql 翻译成 SQL Server?

SELECT *, MATCH(title) AGAINST('My Title' IN BOOLEAN MODE) AS score FROM books
WHERE MATCH(title) AGAINST('My Title' IN BOOLEAN MODE) ORDER BY score DESC,
books.title ASC

如果有帮助,我专门使用 SQL Server 2000。我没有使用更新版本的选项。 :S

这是一个示例场景。


创建表:

--
-- Table structure for table `books`
--

CREATE TABLE IF NOT EXISTS `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `title` (`title`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;

--
-- Index the title column
--

ALTER TABLE `books` ADD INDEX ( `title` )

--
-- Dumping data for table `books`
--

INSERT INTO `books` (`id`, `title`) VALUES
(1, 'My Title'),
(2, 'My Title'),
(3, 'Not My Title'),
(4, 'Other Title'),
(5, 'Not Related'),
(6, 'Not Related Either');

执行查询:

SELECT *, MATCH(title) AGAINST('My Title' IN BOOLEAN MODE) AS score FROM books
WHERE MATCH(title) AGAINST('My Title' IN BOOLEAN MODE) ORDER BY score DESC,
books.title ASC

这是返回的内容:

id  title           score
1   My Title        1
2   My Title        1
3   Not My Title    1
4   Other Title     1

感谢您的宝贵时间。

【问题讨论】:

为了我们这些了解 SQL Server 但不了解 MySQL 的人的利益,您能解释一下 MATCH() AGAINST() 的作用吗?最好有一个例子 - 样本数据和期望的结果。这似乎是您在进行全文搜索,但这只是查询的猜测。 没问题。 MATCH() 采用 MySQL 表中的索引列并匹配传递给 AGAINST() 的字符串。它不会像column = 'string' 那样寻找等效的字符串,但它会返回类似的结果。它也比LIKE %string% 有用得多。按“分数”别名排序允许首先显示与字符串最密切相关的结果。这是我教我如何编写查询来进行全文搜索的文章:devzone.zend.com/26/using-mysql-full-text-searching @AaronBertrand 我已经用示例更新了问题。是的,这是全文搜索。 “score”是表示单词在字符串中出现的次数,还是算法比这更复杂? MySQL 自动计算一个“分数”别名。该分数通常类似于 .9823475 或 .124874,但始终大于零。它的范围可以超过 1,有时甚至可以达到 4。它不计算出现次数,而是对结果的准确性进行排名。 【参考方案1】:

这听起来确实像是实现全文搜索的一个案例。听起来您所追求的算法比CHARINDEXPATINDEXLIKE 提供的算法复杂得多,它们是非常简单的开/关类型结果(字符串包含搜索的表达式或不包含) t)。

全文搜索的官方 Microsoft 文档starts here。 This article may also be useful,以及这篇 MSDN 文章,"Improve the performance of full-text indexing",以及一些 these Full-Text Search tips on mssqltips.com。

您可能最感兴趣的全文关键字是CONTAINSCONTAINSTABLE。 This page describes, among other things, how CONTAINSTABLE applies ranking.

【讨论】:

哇哦!正是我需要的,亚伦!感谢您的帮助。 +1 并接受回答!

以上是关于MySQL MATCH() AGAINST() 等效于 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 部分单词匹配结合 MATCH...AGAINST 和 LIKE 作为备份

mysql全文索引用于 MATCH() AGAINST 但不用于 =

MySQL match() against() - 按相关性和列排序?

mysql 全文模糊搜索MATCH AGAINST方法

MySQL MATCH() AGAINST() FULLTEXT Index - 结合短语匹配实现部分字符串匹配

MySql `MATCH AGAINST` 和 `LIKE` 组合搜索特殊字符