次のSQL Serverクエリを使用しています。フルテキストインデックスを検索して正しく動作しているようです。いくつかの追加作業が含まれているため、クエリはページングで動作します。フルテキスト検索結果の並べ替えを避けたい
しかし、私の理解では、全文検索ではランキングに応じてソートされた結果が得られます。
しかし、上部付近のOVER句を削除するとエラーになります。誰かがこのクエリがどのように結果を利用しないように変更できるか教えていただけますか?
DECLARE @StartRow int;
DECLARE @MaxRows int;
SET @StartRow = 0;
SET @MaxRows = 10;
WITH ArtTemp AS
(SELECT TOP (@StartRow + @MaxRows) ROW_NUMBER() OVER (ORDER BY ArtViews DESC) AS RowID,
Article.ArtID,Article.ArtTitle,Article.ArtSlug,Category.CatID,Category.CatTitle,
Article.ArtDescription,Article.ArtCreated,Article.ArtUpdated,Article.ArtUserID,
[User].UsrDisplayName AS UserName
FROM Article
INNER JOIN Subcategory ON Article.ArtSubcategoryID = Subcategory.SubID
INNER JOIN Category ON Subcategory.SubCatID = Category.CatID
INNER JOIN [User] ON Article.ArtUserID = [User].UsrID
WHERE CONTAINS(Article.*,'FORMSOF(INFLECTIONAL,"htmltag")'))
SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,ArtUpdated,
ArtUserID,UserName
FROM ArtTemp
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows)
ORDER BY RowID
ありがとうございます。
ありがとうございます - あなたは正しいと思われ、それが最善の答えです。ただし、追加の結合と列のオーバーヘッドが必要なのかどうかはわかりません。また、私が持っていた一時テーブルを削除したことに気付きました。おそらくあなたはテストのためにそれをしましたか?ページングロジックには必要と思われます。 –
あなたは正しいです - 私は変更/ CTEを示しただけです。あなたはページングのためにすべてを必要とします。結合のオーバーヘッドに関しては、テーブルの幅とインデックスによっては気付かないかもしれません。いずれのオプションも、外部のFTSエンジンがDBにヒットし、何らかの行ごとの処理を返すことになります。 CONTAINSTABLEの方が速く見つかる人もいます。http://www.eggheadcafe.com/software/aspnet/29849015/contains-vs-containstable-performance.aspx – Matt
CONTAINSは真と真です。だからあなたは本当に関連性を並べるわけではありません。 Mattのアドバイスに従って、代わりにCONTAINSTABLEを使用してソート可能なRANKを与えます。 –