Pregunta

introducir descripción de la imagen aquí

Tengo una tabla con los siguientes textos y la palabra clave que estoy buscando es 'Search'.So he escrito una consulta

SELECT [ID]
  ,[TextValue]
FROM
   [dbo].[SearchLike]
WHERE
   [TextValue] LIKE '%Search%'

Pregunta 1 ¿Cómo puedo modificar la consulta para que sólo los registros que tienen 'Buscar' en el texto se devuelve y no deben tomar 'lsearch'. es decir de acuerdo con la imagen de los tres primeros registros sólo para ser devueltos.?

¿Fue útil?

Solución

Uso COMO

  • Una sola línea como la búsqueda:

    WHERE
     ' ' + [TextValue] + ' ' LIKE '%[.,;:() ]Search[.,;:() ]%'
    
    /* [] contains list of allowable characters, adding spaces around 
       [TextValue] removes need to have multiple OR [TextValue] LIKE */
    
  • Sin relleno tendrá que tratar de manera específica la cadena que aparece en inicio / final de la cadena:

    WHERE
        [TextValue] LIKE '%Search%' --middle
        OR
        [TextValue] LIKE 'Search%'   --start
        OR
        [TextValue] LIKE '%Search'   --end
    

Uso FULLTEXT ÍNDICE

Edit2, para los puristas texto completo

CREATE FULLTEXT INDEX en MSDN establece para la opción AUTO (por defecto)

A pesar de que los cambios se propagan automáticamente, estos cambios puede que no se refleja inmediatamente en el índice de texto.

Por lo tanto, no puede dar resultados correctos. Pero luego de unos segundos más tarde lo hará.

Además, para hasta unos 10k filas se llevará a cabo de manera adecuada: se escala O (n). Yo uso el LIKE en una tabla con filas alrededor de 25k pero los usuarios sé que será un mal resultado si la buscan de esta manera (está en una página de "avanzada"). Gano en la compensación mediante la gestión de un índice de texto completo

Búsqueda en los textos no es la solución correcta, es un opción

Nota: La experiencia me ha demostrado que la indexación de texto completo en SQL Server tiene implicaciones graves de rendimiento, es decir: Sólo poner en práctica si realmente necesita y usted sabe lo que está haciendo! (@ Andrew Bickerton)

Otros consejos

Si la tabla tendrá una cantidad no trivial de filas, es posible que desee probar un índice FULLTEXT lugar. Será mucho más rápido y coincidirá sólo en la palabra exacta.

CREATE FULLTEXT CATALOG <catalog_name> AS DEFAULT;

CREATE FULLTEXT INDEX ON [dbo].[SearchLike](TextValue)
    KEY INDEX pk_id; --requires the existing of a PK or UQ index with this name on this table

Ahora buscar el texto:

SELECT [ID]
  ,[TextValue]
FROM
   [dbo].[SearchLike]
WHERE
   CONTAINS([TextValue], 'Search')

Más información en:

No sé si admite el servidor SQL \b en expresiones regulares (partido en el sitio limítrofe palabra). Y que tendrá que crear una función definida por el usuario para permitir la coincidencia de expresiones regulares en el primer lugar , pero si lo hace, usted podría coincidir en:

\bSearch\b

Si no es así, que aún debe ser capaz de igualar en:

(^| )Search( |$)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top