4

この全文検索クエリをMySQLからSQLServerに変換する方法はありますか?

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

それが役立つ場合は、特にSQLServer2000を使用しています。より新しいバージョンを使用するオプションはありません。: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でのこれらのフルテキスト検索のヒントの一部と同様に役立つ場合があります。

おそらく最も興味のあるフルテキストキーワードはとCONTAINSですCONTAINSTABLEこのページでは、特に、CONTAINSTABLEがランキングを適用する方法について説明します

于 2012-06-23T17:46:23.393 に答える