假设你有一个table 叫 Sequence
里面有一百个record, 只有一个column 叫Sequence.seq, value是从一到一百.
现在你有一个叫Article的table, 其中里面有个叫Article.TextBody的column,是你用来将文章内容存储的地方. 在这里, 以下这个syntax 可以做ranked search...
所谓的ranked search, 就是你给它一个@Keywords,它可以让你知道哪一个record 被referenced 的次数最多.
Declare @Keywords varchar(2000)
Select @Keywords = 'my space delimited string'
Select ArticleID, ArticleTitle, ArticleDescription, count(AA_ID) hits
FROM SEQUENCE
INNER JOIN Articles ON Articles.ArticleBody like '%' +
Substring(' ' + @keywords + ' ',seq,
CharIndex(' ' , ' ' + @keywords + ' ' , seq) - seq)
+ '%'
WHERE
seq <= len(' ' + @keywords + ' ') and
Substring(' ' + @keywords + ' ', seq - 1, 1) = ' ' and
CharIndex(' ' , ' ' + @keywords + ' ' , seq) - seq > 0
Group by ArticleID, ArticleTitle, ArticleDescription
ORDER BY Hits DESC
这小东西,我放在我的stored procedure 里,完全没有问题,可以跑.
可是它并不支援中文搜索.
我已经把所有相关的地方都换成NVARCHAR, 也在literal string 前加了个N, 请问我还少了什么? |