Pergunta

Por exemplo, minha consulta é semelhante ao seguinte usando o SQL Server 2005:

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

Eu tenho um texto integral do índice definido para usar a coluna SearchField que retorna resultados quando utilizar:

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

Eu acredito # é uma carta especial, assim como eu permitir FREETEXT funcionar corretamente para a consulta acima?

Foi útil?

Solução

A # char é indexado como a pontuação e, portanto, ignorado, então parece que nós vamos remover a letra C da nossa palavra de indexação de listas de ignorados.

Testado localmente depois de fazer isso e recriação de índices e eu obter resultados!

A possibilidade de utilizar um separador de palavras diferente do idioma na coluna indexada, de modo que os caracteres especiais não são ignoradas.

EDITAR:Eu também achei esta informação:

c# é indexado como c (se c não está na sua lista de palavras de ruído, veja mais sobre listas de palavra de ruído mais tarde), mas o C# é indexado como C# (SQL 2005 e SQL 2000 em execução no Win2003, independentemente se C ou c está na sua lista de palavras de ruído).Ele não é apenas C#, que é armazenado como C#, mas qualquer letra maiúscula, seguido de #.Por outro lado, c++ ( e em qualquer outro escrito em letra minúscula letra seguida por um ++) é indexado como c (independentemente de c está na sua lista de palavras de ruído).

Outras dicas

Citando um muito replicado página de ajuda sobre consulta do Serviço de Indexação do idioma:

Para usar especialmente tratada caracteres como &, |, ^, #, @, $, (, ), em uma consulta, coloque sua consulta entre aspas (").

Até onde eu sei, pesquisa de texto completo em MSSQL também é feito pelo Serviço de Indexação, de modo que este possa ajudar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top