vista usar texto tablas tabla puede predicado porque por indizado indizada index full está ejemplos completo catalogo campo busqueda buscar sql-server sql-server-2005 wildcard full-text-search

sql-server - usar - sql server buscar texto en un campo



Búsqueda de catálogo/índice de texto completo para% book% (6)

Estoy tratando de entender cómo buscar algo que aparezca en medio de una palabra / expresión, algo así como buscar "LIKE% book%", pero en el catálogo de texto completo de SQL Server (2005).

¿Cómo puedo hacer eso? Casi parece que tanto CONTAINS como FREETEXT realmente no admiten caracteres comodín al comienzo de una expresión de búsqueda, ¿puede ser eso realmente?

Hubiera imaginado que FREETEXT(*, "book") encontraría cualquier cosa con "libro" adentro, incluyendo "reservado" o algo así.


Aquí hay una sugerencia que es una solución para esa limitación de comodín. Usted crea una columna calculada que contiene el mismo contenido pero en reversa como la (s) columna (s) que está buscando.

Si, por ejemplo, está buscando una columna llamada ''ProductTitle'', cree una columna llamada ProductsRev. A continuación, actualice el valor de ''Especificación de Columna Computada'' de ese campo para que sea:

(reverse ([ProductTitle]))

Incluya la columna ''ProductsRev'' en su búsqueda y ahora debería poder devolver resultados que admitan un comodín al comienzo de la palabra. ¡¡Buena suerte!!


La búsqueda de texto completo de SQL Server se basa en convertir el texto en palabras. No hay una unidad más pequeña como palabra, por lo que las cosas más pequeñas que puede buscar son palabras.

Puede usar búsquedas de prefijos para buscar coincidencias que comiencen con ciertos caracteres, lo cual es posible porque las listas de palabras se mantienen en orden alfabético y todo lo que el servidor debe hacer es escanear a través de la lista para buscar coincidencias.

Para hacer lo que quiera una consulta con una cláusula LIKE ''%book%'' probablemente sea igual de rápida (o lenta).


Si desea realizar una búsqueda seria de texto completo, entonces (y) utilizaría Lucene.Net. La búsqueda de texto completo de MS SQL nunca parece funcionar tan bien para nada más que lo básico.


lamentablemente CONTIENE solo admite prefijos comodines:

CONTAINS(*, ''"book*"'')


El texto completo tiene una tabla que enumera todas las palabras que el motor ha encontrado. Debe tener órdenes de magnitud menos filas que su tabla indexada de texto completo. Puede seleccionar de esa tabla "donde campo como ''% book%''" para obtener todas las palabras que tienen ''libro'' en ellos. Luego use esa lista para escribir una consulta de texto completo. Es engorroso, pero funcionaría, y estaría bien en el departamento de velocidad. SIN EMBARGO, al final estás usando el texto completo incorrecto cuando haces esto. En realidad, podría ser mejor educar la fuente de estas solicitudes de características sobre qué texto completo está haciendo. Desea que entiendan lo que QUIERE hacer, para que puedan obtener un gran valor del texto completo. Ejemplo, solo use comodines al final de una palabra, lo que significa que piensa en las palabras en una lista ordenada.


¿Por qué no programar un ensamblaje en C # para calcular todos los sufijos no repetidos? Por ejemplo, si tiene el texto "comer la carne roja", puede almacenar en un campo "comer en la carne roja y roja" (tenga en cuenta que no es necesario agregar "comer" y "t" nuevamente) y luego en este campo usa búsqueda de texto completo. Una función para hacerlo puede escribirse fácilmente en Csharp

x) Sé que parece od ... es un workarround x) Sé que estoy agregando sobrecarga en la inserción / actualización .... solo justificado si esta sobrecarga es insignificante además de la mejora en la función de búsqueda x) Sé que hay también es una sobrecarga en el tamaño de los datos almacenados.

Pero estoy bastante seguro de que será bastante rápido