Sql 在标记具有权重的情况下,存储和搜索标记数据的最有效方法是什么?

Sql 在标记具有权重的情况下,存储和搜索标记数据的最有效方法是什么?,sql,sql-server,tags,full-text-search,Sql,Sql Server,Tags,Full Text Search,我需要在数据库(SQL Server)中保留数千行。每行都需要有标记。现在,当我搜索行时,我传递用户指定的标记,我只需要返回那些至少有一个标记的行。另一个要求是每个标签都有自己的权重,因此结果集必须按照计算出的排名进行排序 例如,当我有两行时,一行有标记A,第二行有标记B,标记A的预定义权重为0.9,而B的权重为0.5,则带有标记A的行在列表中显示得更高 现在,为了解决这个问题,我创建了一个表,其中有一个单独的nvarchar列,我在其中保存标记,用逗号分隔。我为这个专栏创建了全文搜索目录。当我

我需要在数据库(SQL Server)中保留数千行。每行都需要有标记。现在,当我搜索行时,我传递用户指定的标记,我只需要返回那些至少有一个标记的行。另一个要求是每个标签都有自己的权重,因此结果集必须按照计算出的排名进行排序

例如,当我有两行时,一行有标记A,第二行有标记B,标记A的预定义权重为0.9,而B的权重为0.5,则带有标记A的行在列表中显示得更高

现在,为了解决这个问题,我创建了一个表,其中有一个单独的nvarchar列,我在其中保存标记,用逗号分隔。我为这个专栏创建了全文搜索目录。当我搜索行时,我使用
CONTAINSTABLE
ISABOUT
作为搜索工具,在熟悉了SQL Server提供的所有全文搜索功能后,这一功能似乎最适合这种情况

SELECT Items.*  
FROM Items   
INNER JOIN CONTAINSTABLE(Items, Tags,   
    'ISABOUT (
        “tag1” WEIGHT (.8),   
        “tag2” WEIGHT (.4), 
        “tag3” WEIGHT (.2) )', LANGUAGE 0) AS KEY_Items
    ON Items.Id = KEY_Items.[KEY]  
ORDER BY KEY_Items.RANK DESC;

它工作得很好,但我想知道这是否是最有效的方法,并且这个解决方案中是否没有任何陷阱会在将来困扰我?

通常,这将通过一个单独的
ItemTags
表来完成,每个项目和标记有一行。我不确定全文搜索的性能将如何与该解决方案进行比较。是的,这是我最初的设计,但不幸的是
CONTAINSTABLE
对我的知识有限制,无法进行跨多个表的排序和加权搜索。。。除非有一些好的技巧,并且不影响性能。通常,这将通过一个单独的
ItemTags
表来完成,每个item和tag有一行。我不确定全文搜索的性能将如何与该解决方案进行比较。是的,这是我最初的设计,但不幸的是
CONTAINSTABLE
对我的知识有限制,无法进行跨多个表的排序和加权搜索。。。除非有一些好的技巧,并且不影响性能。