Compartilhar via


Escolher um idioma ao criar um índice de texto completo

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

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 sã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 referem-se à forma como o texto é tokenizado e indexado pelo mecanismo de Full-Text.

Observação

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

Esta seção fornece uma introdução a separadores de palavras e lematizadores e discute como Full-Text Pesquisa usa o LCID (identificador de código de idioma) da linguagem no nível da coluna.

Introdução aos separadores de palavras e lematizadores

O SQL Server inclui uma família completa de separadores de palavras e lematizadores. O NLG (Microsoft Natural Language Group) implementa e dá suporte a esses componentes linguísticos.

Os separadores de palavras fornecem os seguintes benefícios:

  • Robustez

    O teste mostra que os separadores de palavras são robustos em ambientes de consulta de alta pressão.

  • Segurança

    Os separadores de palavras são habilitados por padrão no SQL Server. É 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, da seguinte forma:

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Qualidade

    O teste interno mostra que os separadores de palavras fornecem melhor qualidade semântica do que os separadores de palavras anteriores. Isso aumenta a precisão da recuperação.

  • Cobertura para obter uma lista extensa de idiomas. Separadores de palavras são incluídos no SQL Server prontos para uso e habilitados por padrão.

Para obter uma lista dos idiomas para os quais o SQL Server inclui um separador de palavras e lematizadores, consulte sys.fulltext_languages.

Como Full-Text Pesquisa usa o nome do idioma no nível da 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 for retornado pela exibição de catálogo sys.fulltext_languages , Full-Text Pesquisa retornará ao nome de idioma mais próximo disponível da mesma família de idiomas, se houver. Caso contrário, Full-Text Pesquisa retornará ao 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çã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 uma coluna de tipo char, varcharou text definida 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.

Quebra de palavra

Um separador de palavras transforma em token o texto que está sendo indexado nos limites de palavras, os quais são específicos a um idioma. Por isso, o comportamento da separação de palavras é diferente entre diferentes idiomas. Se você usar um idioma, xpara indexar vários idiomas {xe yz}, parte do comportamento poderá causar resultados inesperados. Por exemplo, um traço (-) ou uma vírgula (,) pode ser um elemento de quebra de palavra que é jogado fora em uma linguagem, mas não em outra. 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 outras linguagens, como alemão, palavras ou caracteres podem ser combinados juntos. Portanto, o idioma de nível de coluna escolhido deve representar o idioma que você espera armazenar em linhas dessa coluna.

Idiomas ocidentais

Para a família ocidental de idiomas, se você não tiver certeza de quais idiomas serão armazenados em uma coluna ou esperar que mais de um seja armazenado, uma solução alternativa geral será usar o separador de palavras para a linguagem mais complexa que pode ser armazenada na coluna.

Por exemplo, você pode esperar armazenar conteúdo em inglês, espanhol e alemão em uma única coluna. Essas três línguas ocidentais possuem padrões semelhantes de quebra de palavras, com os padrões alemães sendo 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.

Usar o separador de palavras da linguagem mais complexa em uma família de idiomas não garante a indexação perfeita de cada idioma da família. Casos de canto podem existir em que o separador de palavras mais complexo não pode manipular corretamente o texto escrito em outro idioma.

Idiomas não ocidentais

Para idiomas não ocidentais (como chinês, japonês, hindi e assim por diante) a solução alternativa anterior não funciona necessariamente, por razões linguísticas. 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. Essa separação permite que você use o separador de palavras específico do 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 é do tipo binário , o filtro Full-Text Pesquisa que processa o conteúdo textual antes de enviá-lo para o separador de palavras pode respeitar marcas de idioma específicas existentes no arquivo binário. Nesse caso, no momento da indexação, o filtro emite o LCID certo para um documento ou seção de um documento. O mecanismo de Full-Text chama 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 for um texto sem formatação, você poderá convertê-lo para o tipo de dados xml e adicionar marcas de idioma que indicam 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

Outra consideração ao escolher o idioma no nível da coluna é o resultado. Decorrente de consultas de texto completo é o processo de pesquisa de todas as formas de lematização (inflexão) de uma palavra em uma linguagem específica. 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 lematizadores alemães não funcionam para inglês ou espanhol (e assim por diante). Isso pode afetar seu recall dependendo de qual idioma for escolhido no momento da consulta.

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 em uma 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. Portanto, se você tiver qualquer tipo de marcação (como HTML) em seu texto, talvez não obtenha grande precisão linguística durante a indexação e a pesquisa. Nesse caso, você tem duas opções– o método preferencial é simplesmente armazenar os dados de texto em uma coluna varbinary(max) e indicar seu tipo de documento para que ele possa ser filtrado. Se essa não for uma opção, você poderá considerar o uso do separador de palavras neutro e, se possível, adicionar dados de marcação (como 'br' em HTML) às listas de palavras de ruído.

Observação

O leque baseado em linguagem não entra em jogo quando você especifica o idioma neutro.

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

Por padrão, no SQL Server, Full-Text Pesquisa analisa 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 linguagens com suporte cujos recursos estão instalados, a LANGUAGE <language_term> cláusula de uma consulta CONTAINS, CONTAINSTABLE, FREETEXT ou FREETEXTTABLE pode ser usada para especificar o idioma usado para quebra de palavras, lematização, dicionário de sinônimos e processamento de palavras irrelevantes dos termos da consulta.