Práticas recomendadas para escolher um idioma ao criar um índice de texto completo

Ao criar um índice de texto completo, você precisa especificar um idioma no nível de coluna para a coluna indexada. O separador de palavras e os lematizadores do idioma especificado serão usados por consultas de texto completo na coluna. Há algumas coisas a considerar ao escolher o idioma da coluna ao criar um índice de texto completo. Essas considerações estão relacionadas a como seu texto é transformado em token e, depois, indexado pelo Mecanismo de Texto Completo.

ObservaçãoObservação

Para especificar um idioma no nível de coluna para uma coluna de índice de texto completo, use a cláusula LANGUAGE language_term ao especificar a coluna. Para obter mais informações, consulte CREATE FULLTEXT INDEX (Transact-SQL) e ALTER FULLTEXT INDEX (Transact-SQL).

Separadores de palavras

Um separador de palavras cria tokens do texto que está sendo indexado em limites de palavra, que são específicos de idioma. Por isso, o comportamento da separação de palavras é diferente entre diferentes idiomas. Se você usar o idioma x para indexar vários idiomas {x, y e ,z}, o comportamento de alguns deles poderá gerar resultados inesperados. Por exemplo, um traço (-) ou uma vírgula (,) pode ser um elemento de separação de palavras que será acionado em um idioma, mas não em outro. Além disso, pode ocorrer um comportamento de lematização raramente inesperado porque uma dada palavra pode ter um comportamento de lematização diferente em outro idioma. Por exemplo, no idioma inglês, os limites de palavras normalmente são espaços em branco ou alguma forma de pontuação. Em outros idiomas, como no alemão, palavras ou caracteres podem ser combinados. Portanto, o idioma no nível de coluna escolhido deve representar o idioma que você espera que será armazenado em linhas dessa coluna.

Idiomas ocidentais

No caso da família de idiomas ocidentais, se você não tiver certeza de quais idiomas serão armazenados em uma coluna ou se espera que mais de um seja armazenado, uma alternativa é usar um separador de palavras para o idioma mais complexo que poderá ser armazenado na coluna. Por exemplo, talvez você espere armazenar conteúdo em inglês, espanhol e alemão em uma única coluna. Esses três idiomas ocidentais têm padrões do separação de palavras muito parecidos, sendo que os padrões do alemão são os mais complexos. Por isso, uma boa opção nesse caso seria usar o separador de palavras do idioma alemão, que deverá poder processar os textos em inglês e espanhol corretamente. Por outro lado, o separador de palavras do inglês pode não processar textos em alemão perfeitamente por causa das palavras compostas do idioma.

Observe que o uso do separador de palavras do idioma mais complexo de uma família de idiomas não garante a indexação perfeita de todos os idiomas da família. Pode haver situações específicas nas quais o separador de palavras mais complexo não pode lidar corretamente com textos escritos em outro idioma.

Idiomas não ocidentais

Em idiomas não ocidentais (como chinês, japonês, hindu, entre outros), a solução alternativa acima não funcionará necessariamente, por motivos lingüísticos. Para idiomas não ocidentais, considere uma das seguintes alternativas:

  • Para idiomas de famílias diferentes

    Se uma coluna tiver de conter idiomas drasticamente diferentes, como espanhol e japonês, considere armazenar o conteúdo de idiomas diferentes em colunas separadas. Isso lhe permitiria usar o separador de palavras específico de idioma para cada coluna. Se você escolher essa solução e não souber qual é o idioma de consulta quando fizer a consulta, talvez precise emitir a consulta nas colunas para garantir que ela encontre a linha ou o documento certo.

  • Para conteúdo binário (como documentos do Microsoft Word)

    Quando o conteúdo indexado for do tipo binary, o filtro da pesquisa de texto completo que processa o conteúdo textual antes de enviá-lo para o separador de palavras poderá respeitar as marcas do idioma específico dentro do arquivo binário. Nesse caso, no momento da indexação, o filtro emitirá o LCID correto para um documento ou uma seção de um documento. O Mecanismo de Texto Completo chamará o separador de palavras para o idioma com esse LCID. Porém, após a indexação de conteúdo em vários idiomas, é recomendável verificar se o conteúdo foi indexado corretamente.

  • Para conteúdo em texto sem formatação

    Quando o conteúdo é um texto sem formatação, você pode convertê-lo para o tipo de dados xml e adicionar marcas de idioma que indiquem o idioma correspondente para cada documento ou seção de documento. No entanto, para que isso funcione, você deve saber qual é o idioma antes de executar a indexação de texto completo.

Lematização

Outro aspecto que você deve levar em consideração quando escolher o idioma no nível de coluna é a lematização. Em consultas de texto completo, lematização é o processo de procurar todas as formas lematizadas (flexivas) de uma palavra em um determinado idioma. Quando você usa um separador de palavras genérico para processar vários idiomas, o processo de lematização só funcionará para o idioma especificado para a coluna, e não para os outros idiomas da coluna. Por exemplo, os lematizados de alemão não funcionam para inglês ou espanhol (e assim por diante). Isso poderia afetar a recuperação, dependendo do idioma escolhido no momento da consulta.

Efeito do método de armazenamento de dados na pesquisa de texto completo

Outro aspecto a ser considerado na escolha do idioma está relacionada a como os dados são representados. Para dados que não são armazenados na coluna varbinary(max), nenhuma filtragem especial é executada. Em vez disso, o texto geralmente é passado pelo separador de palavras assim como é.

Além disso, os separadores de palavra foram criados principalmente para processar texto escrito. Então, se você tiver algum tipo de formatação em seu texto (como HTML), não será possível obter grande precisão lingüística durante a indexação e procura. Nesse caso, você tem duas opções – o método preferencial é simplesmente armazenar dados na coluna varbinary(max), e indicar seu tipo de documento para que possa ser filtrada. Se não houver essa opção, você poderá considerar a possibilidade de usar o separador de palavras neutro e, se possível, adicionar dados de marcação (como ‘br’ em HTML) à lista de palavras de ruído.

ObservaçãoObservação

A lematização com base no idioma não entra em jogo quando você especifica o idioma neutro.

Especificando um idioma não padrão no nível de coluna em uma consulta de texto completo

Por padrão, no SQL Server 2008, a pesquisa de texto completo analisará os termos da consulta usando o idioma especificado para cada coluna incluída na cláusula de texto completo. Para ignorar esse comportamento, especifique um idioma não padrão no momento da consulta. Para os idiomas suportados cujos recursos estão instalados, a cláusula LANGUAGE language_term de uma consulta CONTAINS, CONTAINSTABLE, FREETEXT ou FREETEXTTABLE pode ser usada para especificar o idioma utilizado para separação de palavras, lematização, dicionário de sinônimos e processamento de lista de palavras irrelevantes (stoplist) dos termos da consulta.

Suporte ao idioma

Esta seção apresenta uma introdução aos separadores de palavras e lematizadores e discute como a pesquisa de texto completo usa o LCID do idioma no nível de coluna.

Introdução aos separadores de palavras e lematizadores

O SQL Server 2008 inclui uma família totalmente nova de separadores de palavras e lematizadores, que são significativamente melhores do que aqueles que antes estavam disponíveis no SQL Server.

ObservaçãoObservação

O MS NLG (Microsoft Natural Language Group) implementou e dá suporte a esses novos componentes lingüísticos.

Os novos separadores de palavras proporcionam os seguintes benefícios:

  • Robustez

    Testes mostraram que os novos separadores de palavras são robustos em ambientes de consulta de alta pressão.

  • Segurança

    Os novos separadores de palavras são habilitados por padrão no SQL Server 2008 graças aos aprimoramentos de segurança feitos nos componentes lingüísticos. É altamente recomendável que componentes externos, como separadores de palavras e filtros, sejam assinados para melhorar a segurança geral e a robustez do SQL Server. É possível configurar a pesquisa de texto completo para verificar se esses componentes estão assinados, como segue:

    EXEC sp_fulltext_service 'verify_signature';
    
  • Qualidade

    Os separadores de palavras foram reformulados, e testes mostraram que os novos separadores de palavras proporcionam melhor qualidade semântica do que os anteriores. Isso aumenta a precisão da recuperação para usuários do SQL Server 2008.

  • Cobertura

    Em inúmeros idiomas, os separadores de palavras já são incluídos no SQL Server 2008 e ficam habilitados por padrão.

Para ver uma lista de idiomas para os quais o SQL Server 2008 inclui separadores de palavras e lematizadores, consulte sys.fulltext_languages (Transact-SQL).

Separadores de palavras de terceiros

Há diversos separadores de palavras externos de terceiros disponíveis para o SQL Server 2008. Você pode registrá-los manualmente. Para obter mais informações, consulte Como carregar separadores de palavras de terceiros licenciados.

Depois de carregar os separadores de palavras externos (de terceiros), você precisa atualizar a lista de idiomas suportados de texto completo; para isso execute o procedimento armazenado do sistema sp_fulltext_service especificando a opção update_languages, como segue:

EXEC sp_fulltext_service 'update_languages';

Em seguida, os idiomas dos separadores de palavras recém-carregados serão listados pela exibição do catálogo sys.fulltext_languages.

Como a pesquisa de texto completo usa o nome do idioma no nível de coluna

Ao criar um índice de texto completo, você precisa especificar um nome de idioma válido para cada coluna. Se um nome de idioma for válido, mas não retornado pela exibição do catálogo sys.fulltext_languages (Transact-SQL), a pesquisa de texto completo reverterá para o nome de idioma mais próximo disponível da mesma família de idiomas, se houver. Caso contrário, a pesquisa de texto completo reverterá para o separador de palavras Neutro. Esse comportamento de reversão poderá afetar a precisão da recuperação. Portanto, é altamente recomendável especificar um nome de idioma válido e disponível para cada coluna quando você criar um índice de texto completo.

ObservaçãoObservação

O LCID é usado em todos os tipos de dados qualificados para indexação de texto completo (como char ou nchar). Se você tiver a ordem de classificação de um tipo de coluna e a ordem de um tipo de coluna char, varchar ou text definido com uma configuração de idioma diferente do idioma identificado pelo LCID, o LCID será usado de qualquer forma durante a indexação de texto completo e a consulta dessas colunas.