2009-11-06 10 views
15

Así que estoy usando SQL Full Text Search y de lo que leo, CONTAINS devuelve coincidencias cerca de las palabras, mientras que FREETEXT devuelve palabras que tienen un significado similar, sin embargo no encuentro ejemplos que validen esta.Confundido si usar FREETEXTTABLE o CONTAINSTABLE

De todos modos, al punto, estoy utilizando la Búsqueda de texto completo en una tabla con un campo de descripción que es máximo de 2500 caracteres de largo y quiero usar FTS en esto. Esta descripción contendrá cosas como ingredientes para la comida, ¿cuál sería el mejor para usar, CONTIENE o FREETEXT? Lo que yo quiero que mi usuario buscar es algo como:

"receta de pastel de azúcar"

y debe devolver el top resultados clasificados, lo mejor sería fo rEsta, FREETEXT o contiene?

Respuesta

18

Creo que FREETEXT es lo que estás buscando.

Aquí es una buena comparación de las dos opciones:

http://www.sitepoint.com/blogs/2006/12/06/sql-server-full-text-search-protips-part-2-contains-vs-freetext/

Si utiliza contiene, el DONDE vuelve a ser complejos, por lo que no se puede pasar directamente a lo que los usuarios han entrado en su formulario de búsqueda:

 
WHERE CONTAINS(notes, 'FORMSOF(INFLECTIONAL, recipe) or FORMSOF(INFLECTIONAL, cuisine)') 

Pero, si se utiliza FREETEXT, se especifica directamente el "formulario de búsqueda" en el que:

 
WHERE FREETEXT(notes, 'recipe for cake sugar') 

Yo diría que CONTAINS es útil si desea buscar algo donde su programa crea la consulta porque es mucho más potente y tiene más control. Por otro lado, FREETEXT es útil cuando desea hacer una consulta de "estilo de google" que su usuario especifica en una sintaxis simple (solo las palabras) qué buscar.

9

CONTAINSTABLE

http://msdn.microsoft.com/en-us/library/ms189760(v=SQL.90).aspx devuelve una tabla de cero, uno, o más filas para aquellas columnas que contienen tipos de datos basados ​​en caracteres para precisa o difusa (menos preciso) coincide con palabras sueltas y frases, la proximidad de las palabras dentro de una cierta distancia el uno del otro, o coincidencias ponderadas. CONTAINSTABLE se puede referenciar en la cláusula FROM de una instrucción SELECT como si fuera un nombre de tabla normal.

Las consultas que usan CONTAINSTABLE especifican consultas de texto completo que contienen un valor de clasificación de relevancia (RANK) y una clave de texto completo (KEY) para cada fila. La función CONTAINSTABLE utiliza las mismas condiciones de búsqueda que el predicado CONTAINS.

FREETEXTTABLE

http://msdn.microsoft.com/en-us/library/ms177652(v=SQL.90).aspx 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 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.

Cuestiones relacionadas