有没有办法将这个全文搜索查询从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
感谢您的时间。
答案 0 :(得分:2)
这听起来像是实现全文搜索的情况。听起来你所使用的算法要比CHARINDEX
,PATINDEX
和LIKE
提供的算法复杂得多,这是非常简单的开/关类型结果(字符串包含搜索表达式或它没有)。
SQL Server 2000 starts here中有关全文搜索的官方Microsoft文档。 This white paper may also be useful以及此MSDN文章"10 Ways to Optimize Full-Text Indexing"以及these Full-Text Search tips on mssqltips.com中的一些文章。
您最感兴趣的全文关键字是CONTAINS
和CONTAINSTABLE
。 This page describes, among other things, how CONTAINSTABLE applies ranking