4

有没有办法可以将这个全文搜索查询从 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

感谢您的时间。

4

1 回答 1

3

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

全文搜索的官方 Microsoft 文档从此处开始这篇文章以及这篇 MSDN 文章“提高全文索引的性能”以及mssqltips.com 上的一些全文搜索技巧也可能有用。

您可能最感兴趣的全文关键字是CONTAINSCONTAINSTABLE此页面描述了 CONTAINSTABLE 如何应用排名等内容

于 2012-06-23T17:46:23.393 回答