【问题标题】:SQL Semanticsimilaritytable for Multiple Matches多个匹配的 SQL 语义相似性表
【发布时间】:2016-06-30 20:10:50
【问题描述】:

我正在对 1000 个文档进行语义分析。我想要每个文档的前 5 个匹配项。这是我正在使用的查询;

DECLARE @FTE hierarchyid
SELECT @FTE = path_locator
   from dbo.LatinBooks

Select top (5)
 e.name
,d.name as MatchedFTE
,KEY_TBL.score
FROM SEMANTICSIMILARITYTABLE
     (dbo.LatinBooks,
      file_stream,
      @FTE ) as KEY_TBL
 INNER JOIN dbo.LatinBooks d on KEY_TBL.matched_document_key= d.path_locator
 left Join (select path_locator,name from dbo.LatinBooks) e on @fte=e.path_locator 
Order by Key_tbl.score DESC;

此查询有效,它返回第一个文档的最高匹配项。我可以对脚本进行哪些更改,它将返回所有 1000 个文档的匹配项。结果将显示 5,000 行(一个文档和五个匹配项)

【问题讨论】:

    标签: sql sql-server full-text-search semantics


    【解决方案1】:

    你想要row_number():

    select *
    from (Select e.name, d.name as MatchedFTE, KEY_TBL.score,
                 row_number() over (partition by e.name order by KEY_TBL.score desc) as seqnum
          from SEMANTICSIMILARITYTABLE(dbo.LatinBooks,file_stream, @FTE
                                      ) KEY_TBL INNER JOIN
               dbo.LatinBooks d
               on KEY_TBL.matched_document_key = d.path_locator left Join
               dbo.LatinBooks e
               on @fte = e.path_locator 
         ) x
    where seqnum <= 5;
    

    【讨论】:

    • 当我运行您发送的脚本时,它要求声明“@FTE”。如果声明 '@FTE' ,它将仅返回第一个文档的顶部 (5)。我需要所有文档的匹配项
    • @Gjorge 。 . .您的原始查询中有 @FTE
    • 是的,我在原始查询中有@fte
    • @Gjorge 。 . . partition by 需要按用于标识文档的列。我认为name 是正确的字段,但我真的不知道。你可以试试其他列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多