2010-08-07 31 views
7

Estoy usando la consulta siguiente para devolver los resultados de una tabla usando Búsqueda de texto completo. En SQL2000 solo fue posible buscar una o todas las columnas en una tabla. ¿Es posible en SQL 2008?Búsqueda de texto completo de SQL Server Búsqueda FREETEXTTABLE varias columnas

me gustaría buscar dos mesas, problema y solución (Tanto indexado y en la misma tabla):

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; 

Por lo que puedo ver el FREETEXTTABLE no acepta más de una columna?

Respuesta

12

Las especifica entre paréntesis; FREETEXTTABLE(tablename, (col1,col2,col3), 'expr') o use un asterisco para buscar todas las columnas en el índice.

+1

¿No afectará el asterisco, sin embargo, si se usa sin discreción? – Tobiasopdenbrouw

+1

Sí, de hecho, si hay una columna en el índice que no le importa. –

0

From MSDN,

devuelve una tabla de cero, uno, o más filas de esas columnas que contienen tipos de datos basados ​​en caracteres para los valores que coinciden con el significado, pero no las palabras exactas, del texto de la especificada freetext_string. FREETEXTTABLE solo se puede referenciar en la cláusula FROM de una instrucción SELECT como un nombre de tabla normal. Las consultas que utilizan FREETEXTTABLE especifican consultas de texto completo de tipo texto libre que devuelven un valor de clasificación de relevancia (RANK) y una clave de texto completo (KEY) para cada fila.

Dan la siguiente sintaxis:

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

Así que sí, lo que dijo Alex K. también.

0

Si creó un ÍNDICE FULLTEXT en columnas diferentes, entonces puede usar CONTAINS o FREETEXT para buscar uno de ellos, todos ellos o algunos de ellos. De esta manera:

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); 

Si desea especificar las columnas que desea buscar. Si necesita los resultados en una columna, tendrá que hacer una UNIÓN y hacer una búsqueda para cada columna que desee que se busque.

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

¿Cómo podría hacerlo si solo necesito una parte de la palabra pero todavía mostraré la palabra completa? Al igual que si el valor de búsqueda es 'Curt', el resultado de la búsqueda sería' Cortina, Curtis, Curtman ... ' – Rich

Cuestiones relacionadas