Partilhar via


Escolha 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 de 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 estão relacionadas à forma como seu texto é tokenizado e, em seguida, indexado pelo Full-Text Engine.

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 aos separadores de palavras e lematizadores e discute como Full-Text Pesquisa usa o identificador de código de idioma (LCID) do idioma 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 Microsoft Natural Language Group (NLG) implementa e suporta esses componentes linguísticos.

Os separadores de palavras oferecem os seguintes benefícios:

  • Robustez

    Os testes mostram 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. Você pode configurar o texto completo para verificar se esses componentes estão assinados da seguinte maneira:

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Qualidade

    Os testes internos mostram que os separadores de palavras fornecem melhor qualidade semântica do que os separadores de palavras anteriores. Isso aumenta a precisão da recordação.

  • Cobertura para uma vasta lista de idiomas, separadores de palavras são incluídos no SQL Server pronto 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 retornado pela exibição de catálogo sys.fulltext_languages , Full-Text Pesquisa retornará ao nome de idioma disponível mais próximo da mesma família de idiomas, se houver. Caso contrário, Full-Text Pesquisa retornará ao separador de palavras Neutro. Esse comportamento de fall-back pode afetar a precisão da recuperação. Portanto, é altamente recomendável que você especifique um nome de idioma válido e disponível para cada coluna ao 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 char, varchar ou tipo de texto definida para uma configuração de idioma diferente do idioma identificado pelo LCID, o LCID será usado de qualquer maneira durante a indexação de texto completo e a consulta dessas colunas.

Quebra de palavras

Um separador de palavras tokeniza o texto que está sendo indexado nos limites de palavras, que são específicos do idioma. Portanto, o comportamento de quebra de palavras difere entre diferentes idiomas. Se você usar um idioma, x, para indexar vários idiomas {x, ye z}, parte do comportamento pode causar resultados inesperados. Por exemplo, um traço (-) ou uma vírgula (,) pode ser um elemento de quebra de palavra que é jogado fora em um idioma, mas não em outro. Também raramente pode ocorrer um comportamento de derivação inesperado porque uma determinada palavra pode ter um teor diferente em linguagem diferente. Por exemplo, na língua inglesa, os limites das palavras são tipicamente espaços em branco ou alguma forma de pontuação. Noutras línguas, como o alemão, as palavras ou os caracteres podem ser combinados. Portanto, o idioma de nível de coluna que você escolher deve representar o idioma que você espera armazenar em linhas dessa coluna.

Línguas ocidentais

Para a família ocidental de idiomas, 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 solução geral é usar o separador de palavras para o idioma mais complexo que pode ser armazenado na coluna.

Por exemplo, você pode esperar armazenar conteúdo em inglês, espanhol e alemão em uma única coluna. Estas três línguas ocidentais possuem padrões semelhantes de quebra de palavras, sendo os padrões alemães os mais complexos. Portanto, uma boa escolha neste caso seria usar o separador de palavras alemão, que deve ser capaz de processar texto em inglês e espanhol corretamente. Em contraste, o separador de palavras em inglês pode não processar o texto alemão perfeitamente por causa das palavras compostas do alemão.

Usar o separador de palavras da língua mais complexa de uma família linguística não garante a indexação perfeita de todas as línguas da família. Podem existir casos de canto em que o separador de palavras mais complexo não consegue lidar corretamente com texto escrito em outro idioma.

Línguas 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 soluções alternativas:

  • Para línguas de diferentes famílias

    Se uma coluna pode conter idiomas dramaticamente diferentes, por exemplo, espanhol e japonês, considere armazenar o conteúdo de idiomas diferentes em colunas separadas. Essa separação permitiria que você usasse o separador de palavras específico do idioma para cada coluna. Se você escolher essa solução e não souber a linguagem da consulta no momento da consulta, talvez seja necessário emitir a consulta em ambas as colunas para garantir que a consulta encontre a linha ou o documento correto.

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

    Quando o conteúdo indexado é do tipo binário , o filtro de Pesquisa de Full-Text que processa o conteúdo textual antes de enviá-lo para o separador de palavras pode honrar marcas de idioma específicas existentes no arquivo binário. Nesse caso, no momento da indexação, o filtro emite o LCID correto para um documento ou seção de um documento. Em seguida, o mecanismo de Full-Text chama o separador de palavras para o idioma com esse LCID. No entanto, depois de indexar conteúdo em vários idiomas, recomendamos que você verifique se o conteúdo foi indexado corretamente.

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

    Quando o conteúdo é texto sem formatação, você pode convertê-lo para o tipo de dados xml e adicionar marcas de idioma que indicam o idioma correspondente a cada documento ou seção de documento específica. Para que isso funcione, no entanto, você precisa conhecer o idioma antes da indexação de texto completo.

Travessão

Outra consideração ao escolher o idioma em nível de coluna é a derivação. Stemming em consultas de texto completo é o processo de busca de todas as formas derivadas (flexionais) de uma palavra em um idioma específico. Quando você usa um separador de palavras genérico para processar vários idiomas, o processo de derivação funciona apenas para o idioma especificado para a coluna, não para outros idiomas na coluna. Por exemplo, lematizadores alemães não trabalham para inglês ou espanhol (e assim por diante). Isso pode afetar seu recall dependendo do idioma escolhido no momento da consulta.

Outra consideração na escolha do idioma está relacionada à forma 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 através do componente de quebra de palavras as-is.

Além disso, os separadores de palavras são projetados 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 preferido é 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ê pode considerar usar o separador de palavras neutro e, se possível, adicionar dados de marcação (como 'br' em HTML) às suas listas de palavras de ruído.

Observação

A derivação baseada em linguagem não entra em jogo quando você especifica a linguagem neutra.

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

Por padrão, no SQL Server, a Pesquisa Full-Text analisa os termos de consulta usando o idioma especificado para cada coluna incluída na cláusula de texto completo. Para substituir esse comportamento, especifique um idioma não padrão no momento da consulta. Para idiomas suportados cujos recursos estão instalados, a LANGUAGE <language_term> cláusula de uma consulta CONTAINS,CONTAINSTABLE,FREETEXT ouFREETEXTTABLE pode ser usada para especificar o idioma usado para quebra de palavras, derivação, dicionário de sinônimos e processamento de palavras paradas dos termos de consulta.