我正在使用以下查询来使用全文搜索从表中返回结果。 在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不接受多列?
答案 0 :(得分:16)
您可以在括号中指定它们; FREETEXTTABLE(tablename, (col1,col2,col3), 'expr')
或使用星号搜索索引中的所有列。
答案 1 :(得分:1)
返回包含基于字符的数据类型的列的零行,一行或多行的表,这些列的值与指定的freetext_string中的文本的含义相匹配,但不是精确的措辞。 FREETEXTTABLE只能在SELECT语句的FROM子句中引用,如常规表名。 使用FREETEXTTABLE的查询指定自由文本类型的全文查询,该查询返回每行的相关性排名值(RANK)和全文密钥(KEY)。
他们提供以下语法:
FREETEXTTABLE (table , { column_name | (column_list) | * }
,'freetext_string'
[ , LANGUAGE language_term ]
[ ,top_n_by_rank ] )
是的,Alex K.也说过。
答案 2 :(得分:0)
如果您在不同的列上创建了一个FULLTEXT INDEX,那么您可以简单地使用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);
如果要指定要搜索的列。如果您需要在一列中显示结果,则必须执行UNION并搜索要搜索的每个列。
SELECT *
FROM YourTable
WHERE CONTAINS(ProductName, @SearchTerm)
UNION
SELECT *
FROM YourTable
WHERE CONTAINS(ProductNumber, @SearchTerm)
UNION
SELECT *
FROM YourTable
WHERE CONTAINS(Color, @SearchTerm)