2010-05-11 10 views
6

Estoy tratando de implementar una búsqueda de texto completo en dos columnas para las que creé una vista: VendorName, ProductName. Tengo el índice de texto completo, etc. funcionando, pero la consulta real es lo que está causando algunos problemas para mí.¿Cómo se implementa una búsqueda de texto completo en varias columnas en el servidor sql?

Quiero que los usuarios puedan usar algunas convenciones de búsqueda estándar, Y O NO y la agrupación de términos por() que está bien, pero quiero aplicar la búsqueda a ambas columnas, por ejemplo si tuviera que ejecutar un consulta como:

SELECT * FROM vw_Search 
WHERE CONTAINS((VendorName, ProductName), "Apple AND iTunes") 

parece ser que la aplicación de la consulta para cada columna, es decir, de forma individual comprobar el nombre del proveedor de ambos términos y después de comprobar el nombre del producto para los dos términos que solía partido menos que el vendedor fue llamado "iTunes de Apple".

Si cambio de la consulta a:

SELECT * FROM vw_Search 
WHERE CONTAINS(VendorName, "Apple OR iTunes") 
AND CONTAINS(ProductName, "Apple OR iTunes") 

entonces funciona, pero rompe otras consultas de búsqueda (como la búsqueda de simplemente manzana) y de usuario escribir la consulta que no tiene mucho sentido que lo que es probable que escriba Y pero requiere un O para funcionar.

Lo que quiero es que regrese si entre los dos el término de búsqueda era válido para que coincida con todos los proveedores llamados apple con un nombre de producto itunes por ejemplo.

¿Debo crear un campo separado en la vista que concatena los campos Proveedor y Producto y realiza la primera consulta en ese campo nuevo o hay algo que me estoy perdiendo?

Aparte de eso, ¿alguien sabe de un método existente para validar las consultas?

Respuesta

7

En versiones anteriores de SQL Server, las consultas coinciden en varias columnas.

Sin embargo, esto se consideró bug.

Para hacer coincidir en varias columnas, debe concatenarlas en una columna calculada y crear un índice sobre esa columna.

+0

Esto parece ser imposible con una vista de Servidor SQL. ¿Estoy equivocado? (no se puede crear un índice no agrupado en una vista que tenga columnas calculadas) –

+0

@RoyTinker: ¿qué quiere decir con "una vista que tiene columnas calculadas"? – Quassnoi

+0

No importa, mi comentario es incorrecto (eso es posible). Por "ver que tiene columnas calculadas" quise decir lo que dijiste antes, suponiendo que quisieras crear una vista. –

Cuestiones relacionadas