SQL Server全文搜索FREETEXTTABLE搜索多列

SQL Server全文搜索FREETEXTTABLE搜索多列,sql,tsql,Sql,Tsql,我使用下面的查询返回使用全文搜索的表中的结果。 在SQL2000中,只能搜索表中的一列或所有列。在SQL 2008中可能吗 我想搜索两个表,问题和解决方案(都是索引的,并且在同一个表中): 据我所见,FREETEXTTABLE不接受多个列。您可以在括号中指定它们FREETEXTTABLE(tablename,(col1,col2,col3),'expr')或使用星号搜索索引中的所有列。 为包含基于字符的数据类型的列返回一个包含零行、一行或多行的表,这些数据类型的值与指定freetext_字符串中

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

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


据我所见,FREETEXTTABLE不接受多个列。

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

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

它们给出了以下语法:

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

是的,Alex K.也这么说。

如果您在不同的列上创建了全文索引,那么您可以简单地使用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)

如果不谨慎使用,星号不会影响性能吗?是的,如果索引中有一列您不关心的话。如果我只需要单词的一部分,但仍然会显示完整的单词,我该怎么办?例如,如果搜索值是
Curt
,搜索结果将是
窗帘,Curtis,Curtman…
@Rich您可以在
@SearchTerm
-*中添加“Curt*”,它们是通配符,但它们必须是双qoutes,您只能在不包含自由文本的情况下执行此操作
SELECT *
FROM YourTable
WHERE CONTAINS(ProductName, @SearchTerm)
UNION
SELECT *
FROM YourTable
WHERE CONTAINS(ProductNumber, @SearchTerm)
UNION 
SELECT *
FROM YourTable
WHERE CONTAINS(Color, @SearchTerm)