有没有一种方法可以将此全文搜索查询从MySQL转换为SQL Server?MySQL MATCH()AGAINST()等价于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%'更有用。按“分数”别名排序允许与字符串最密切相关的结果首先显示。这里是我教我如何编写查询以进行全文搜索的文章:http://devzone.zend.com/26/using-mysql-full-text-searching/ –
@AaronBertrand我已经更新了问题与样品。是的,这是全文搜索。 –