Pregunta

Tengo una tabla indexada de texto completo en SQL Server 2008 que estoy tratando de consulta para una coincidencia exacta con la frase textual. No creo que el uso contiene o gusta es apropiado para esto, ya que en otros casos, la consulta podría no ser exacta (el usuario no lo hace la frase envolvente entre comillas dobles) y, en general, quiero flexibilidad de FREETEXT.

De acuerdo con la documentación [MSDN] para FREETEXT:

Si freetext_string está encerrada entre comillas dobles, un partido de la frase en su lugar se lleva a cabo; despalillado y no se realizan tesauro.

que me llevaría a creer que una consulta como la siguiente:

SELECT Description  
FROM Projects   
WHERE FREETEXT(Description, '"City Hall"')  

Sólo volvería resultados donde el término "Ayuntamiento" aparece en el campo Descripción, pero en lugar de eso obtener resultados como este:

1 Diseño de rampa para discapacitados en Manning Hall.
2 investigación de la antena. Cliente: Ciudad de Cranston Departamento de Ingeniería
3 investigación estructural en relación con el daño de fuego al Salón de la Fama del Tenis.
Investigación 4 Investigación de la azotea por satélite de diseño propuesto sobre Herald Hall.
Etc ...

Es evidente que esos resultados incluyen al menos una de las palabras en mi frase, pero no la frase en sí. Lo que es peor, yo había pensado que los resultados se clasifican, pero los dos resultados realidad quería (ya que incluyen la frase real) están enterrados.

SELECT Description  
FROM Projects  
WHERE Description LIKE '%City Hall%'  

1 Major exterior y el interior de la renovación del ayuntamiento existente para Quincy Massachusetts
2 investigación estructural superficial de Pawtucket Ayuntamiento de Torre plagada de fugas.

Estoy seguro de que este es un caso de mí no entender la documentación, pero hay una manera de lograr lo que estoy buscando? Es decir, ser capaz de pasar de una cadena de búsqueda sin comillas y obtener exactamente lo que estoy haciendo ahora o con citas y obtener sólo esa frase exacta?

¿Fue útil?

Solución

Como usted ha dicho, FREETEXT mira hacia arriba cada palabra de la frase, no la frase como un todo. Para eso se necesita utilizar la instrucción CONTAINS. De esta manera:

SELECT Description  
FROM Projects   
WHERE CONTAINS(Description, '"City Hall"')

Si desea obtener el rango de los resultados, usted tiene que utilizar CONTAINSTABLE. Funciona más o menos lo mismo, pero devuelve una tabla con dos columnas: [Clave] wich contiene la clave primaria de la tabla de búsqueda y [Rango], que le da el rango del resultado

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top