SQL Server Полнотекстовый поиск FREETEXTTABLE поиск по нескольким столбцам - PullRequest
9 голосов
/ 07 августа 2010

Я использую приведенный ниже запрос для возврата результатов из таблицы с помощью полнотекстового поиска. В 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 ]

16 голосов
/ 07 августа 2010

Вы указываете их в скобках;FREETEXTTABLE(tablename, (col1,col2,col3), 'expr') или используйте звездочку для поиска всех столбцов в индексе.

1 голос
/ 07 августа 2010

Из MSDN ,

Возвращает таблицу с нулем, одной или несколькими строками для тех столбцов, которые содержат символьные типы данных для значений, соответствующих значению, но неточная формулировка текста в указанной freetext_string.На FREETEXTTABLE можно ссылаться только в предложении FROM оператора SELECT, как обычное имя таблицы.Запросы, использующие FREETEXTTABLE, задают полнотекстовые запросы типа свободного текста, которые возвращают значение ранжирования релевантности (RANK) и полнотекстовый ключ (KEY) для каждой строки.

Они дают следующий синтаксис:

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

Итак, да, что сказал и Алекс К.

0 голосов
/ 06 марта 2013

Если вы создали 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...