【问题标题】:Return Page of Full-Text Search Results without Resorting?全文搜索结果的返回页面不诉诸?
【发布时间】:2011-06-11 06:35:07
【问题描述】:

我有一个类似于以下的查询来返回与全文搜索匹配的文章。在生产中,文本[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) 使用结果。有什么方法可以在不使用结果的情况下编写相同的查询?

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多