2011-06-11 18 views
6

मेरे पास एक पूर्ण-पाठ खोज से मेल खाने वाले लेखों को वापस करने के लिए निम्न के जैसा एक प्रश्न है। उत्पादन में, पाठ [FULL TEXT SEARCH CRITERIA] को वास्तविक पूर्ण-पाठ खोज अभिव्यक्ति के साथ प्रतिस्थापित किया गया है।रिज़ॉर्ट के बिना पूर्ण-पाठ खोज परिणामों का रिटर्न पृष्ठ?

प्रश्न केवल परिणामों के एक पृष्ठ को लौटने के लिए लिखा गया है।

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 [FULL TEXT SEARCH CRITERIA] AND Article.ArtApproved = 1 
) 

SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,ArtUpdated, 
ArtUserID,UserName FROM ArtTemp 
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows) 
ORDER BY RowID 

यह ठीक काम करता है, सिवाय इसके कि पूर्ण-पाठ खोज प्रासंगिकता के क्रम में परिणाम देता है, लेकिन ROW_NUMBER() OVER (ORDER BY ArtViews DESC) सैरगाह का परिणाम है। क्या परिणाम का उपयोग किये बिना एक ही प्रश्न लिखने का कोई तरीका है?

उत्तर

1

ऐसा लगता है कि इसका सही उत्तर CONTAINSTABLE का उपयोग करना है, जो CONTAINS के समान काम करता है लेकिन एक बूलियन WHERE स्थिति के बजाय एक तालिका देता है।

तो मैं इसके बजाय इस तरह कुछ खत्म कर देता हूं।

WITH ArtTemp AS (
    SELECT TOP (@StartRow + @MaxRows) ROW_NUMBER() OVER (ORDER BY FTS.RANK 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 
    INNER JOIN CONTAINSTABLE(Article, *, 'FORMSOF(INFLECTIONAL, abc)') AS FTS ON Article.ArtID = FTS.[KEY] 
    WHERE Article.ArtApproved = 1 
) 

SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,ArtUpdated, 
ArtUserID,UserName FROM ArtTemp 
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows) 
ORDER BY RowID 
संबंधित मुद्दे