2008-08-04 5 views
16

Por ejemplo, mi consulta es el siguiente uso de SQL Server 2005:¿Por qué la indización de texto completo de SQL no arroja resultados para las palabras que contienen #?

SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#') 

que tienen un índice de texto completo se define a utilizar la columna SearchField que devuelve resultados cuando se utiliza:

SELECT * FROM Table WHERE SearchField LIKE '%c#%' 

creo # es una letra especial, entonces, ¿cómo permito que FREETEXT funcione correctamente para la consulta anterior?

+0

Solo una conjetura, pero ¿qué tal "c \\ #"? –

Respuesta

10

El # char se indexa como puntuación y, por lo tanto, se ignora, por lo que parece que eliminaremos la letra C de las listas de ignorar de indexación de palabras.

¡Lo probé localmente después de hacer eso y de reconstruir los índices y obtengo resultados!

Buscando utilizar un diferente lenguaje separador de palabras en la columna indexada, para que esos caracteres especiales no sean ignorados.

EDIT: también encontró this information:

C# está indexado como c (si c no está en su lista de palabras irrelevantes, ver más en las listas de palabras irrelevantes posteriores), pero C# está indexado como C# (en SQL 2005 y SQL 2000 ejecutándose en Win2003, independientemente de si C oc está en su lista de palabras irrelevantes). No es solo C# que se almacena como C#, sino cualquier letra mayúscula seguida de #. Por el contrario, C++ (y cualquier otra letra de recuadro inferior seguida de un ++) se indexa como c (independientemente de si c está en su lista de palabras de ruido).

1

Citando una página de ayuda mucho replicado-sobre la indexación lenguaje de consulta de servicio:

Para utilizar caracteres especialmente tratadas como &, |, ^, #, @, $, (,), en una consulta, encierre su consulta entre comillas (").

Por lo que sé, la búsqueda de texto completo en MSSQL también se realiza por el servicio de Index Server, por lo que esto podría ayudar.

Cuestiones relacionadas