有沒有一種方法可以將此全文搜索查詢從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我已經更新了問題與樣品。是的,這是全文搜索。 –