2011-12-08 15 views
20

estoy teniendo un poco de dificultad para encontrar una buena solución para esto:SQL 2008: Apagar las palabras vacías de búsqueda de texto de consulta

Digamos que tengo una tabla de "Compañía", con una columna llamada "Nombre". Tengo un catálogo de texto completo en esta columna. Si un usuario busca "Muy buena compañía", mi pregunta sería:

SELECT 
    * 
FROM 
    Company 
WHERE 
    CONTAINS(Name, '"Very" AND "Good" AND "Company"') 

el problema es en este ejemplo, la palabra "muy" aparece en la lista estándar de palabras vacías:

SELECT 
    ssw.* 
FROM 
    sys.fulltext_system_stopwords ssw 
WHERE 
    ssw.language_id = 1033; 

Como resultado, la consulta vuelve sin filas, aunque hay una fila con el nombre "Empresa muy buena".

Mi pregunta es, ¿cómo voy a hacer para desactivar las palabras vacías de mi consulta? ¿O cómo podría eliminarlos por completo?

¿O hay otra manera en la que debería realizar esta búsqueda?

Respuesta

34

En caso de que alguien se tropieza demás sobre este problema:

Parece que hay una opción para hacer esto en 2008; no era evidente para mí porque la base de datos se actualizó a partir de 2005, donde no creo que esta fuera una opción.

La primera cosa que hay que hacer es establecer el nivel de compatibilidad hasta 2008:

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100 

Entonces, cuando se crea el índice de texto completo a través del asistente, hay un paso que le permite hacer caso omiso de las palabras vacías para el índice

editar: Aquí está la secuencia de comandos para hacerlo así:

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF 
+0

Esto funcionó perfectamente. – James

+9

Encerrarlo nuevamente está un poco oculto en BOL. No solo lo configura en ON, sino que necesita establecerlo en el nombre de una de sus propias listas de finalización o usar 'SYSTEM' para usar el incorporado:' ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = SYSTEM' – Rhumborl

15

por defecto en SQL Server las palabras vacías no son ignorados.

Esto es lo que quiere hacer:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'transform noise words', 1; 
RECONFIGURE; 
GO 

REF: http://msdn.microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx

+0

No desea desactivar la lista de palabras para detener como la otra publicación. El rendimiento se convierte en un problema con grandes conjuntos de datos. –

+0

Sin embargo, no funciona con la coincidencia de prefijo, si busca '" cat * "y" the * "', es decir. – strider

0

que estaba teniendo este problema el día de hoy con la búsqueda de texto completo.

151-663049 - returns result 
151-66304 - no result 
151-6630 - no result 
151-663 - no result 
151-66 - no result 
151-6 - returns result 
151 - returns result 
151 returns result 

Pero he leído una publicación que dice que para solucionar el problema, añada un * al final de cada búsqueda. http://social.msdn.microsoft.com/Forums/sqlserver/en-US/fae33a6b-7c7c-4c11-842c-ca5277ed824f/ms-sql-server-2008-r2-fulltext-search-problem

151-663049* - returns result 
151-66304* - returns result 
151-6630* - returns result 
151-663* - returns result 
151-66* - returns result 
151-6* - returns result 
151-* - returns result 
151* - returns result 

Así que en su parámetro simplemente añada * a sus búsquedas y problema resuelto.

Cuestiones relacionadas