代码之家  ›  专栏  ›  技术社区  ›  madlan

SQL Server全文搜索FREETEXTTABLE搜索多列

  •  9
  • madlan  · 技术社区  · 14 年前

    我使用下面的查询返回使用全文搜索的表的结果。 在SQL2000中,只能搜索表中的一列或所有列。在SQL 2008中是否可能?

    我想搜索两个表,问题和解决方案(都已索引并在同一个表中):

    DECLARE @topRank int set @topRank=(SELECT MAX(RANK) 
    FROM FREETEXTTABLE([Support_Calls], Problem, 'test', 1)) 
    SELECT [ID] AS [Call No],Company_Name, Problem, Solution, CONVERT(VARCHAR(20),CAST((CAST(ftt.RANK as DECIMAL)/@topRank * 100) AS DECIMAL(13,0))) + '%' as Match 
    FROM [Support_Calls] INNER JOIN FREETEXTTABLE([Support_Calls], Problem, 'test') as ftt ON ftt.[KEY]=[ID] ORDER BY ftt.RANK DESC;
    

    从这里我可以看到FREETEXTTABLE不接受多个列?

    3 回复  |  直到 14 年前
        1
  •  17
  •   Alex K.    14 年前

    在括号中指定它们; FREETEXTTABLE(tablename, (col1,col2,col3), 'expr') 或者使用星号搜索索引中的所有列。

        2
  •  1
  •   Tobiasopdenbrouw    14 年前

    From MSDN ,

    为那些包含基于字符的数据类型的列返回一个由零行、一行或多行组成的表,这些数据类型的值与指定freetext\u字符串中文本的含义(而不是确切的措辞)匹配。FREETEXTTABLE只能在SELECT语句的FROM子句中引用,就像常规表名一样。 使用FREETEXTTABLE的查询指定freetext类型的全文查询,这些查询为每一行返回一个相关性排序值(RANK)和全文键(key)。

    它们给出以下语法:

    FREETEXTTABLE (table , { column_name | (column_list) | * } 
              ,'freetext_string' 
         [ , LANGUAGE language_term ] 
         [ ,top_n_by_rank ] )
    

    是的,什么亚历克斯K。他也说。

        3
  •  0
  •   Thomas    12 年前

    如果您在不同的列上创建了全文索引,那么您可以简单地使用CONTAINS或FREETEXT来查看其中一列、所有列或部分列。这样地:

    SELECT *
    FROM YourTable
    WHERE CONTAINS(*, @SearchTerm);
    
    If you want to look on all the columns that are included in the FULLTEXT INDEX. or:
    
    SELECT *
    FROM YourTable
    WHERE CONTAINS((ProductName, ProductNumber, Color), @SearchTerm);
    

    SELECT *
    FROM YourTable
    WHERE CONTAINS(ProductName, @SearchTerm)
    UNION
    SELECT *
    FROM YourTable
    WHERE CONTAINS(ProductNumber, @SearchTerm)
    UNION 
    SELECT *
    FROM YourTable
    WHERE CONTAINS(Color, @SearchTerm)