Elegir un idioma al crear un índice de texto completo

Se aplica a:SQL ServerAzure SQL Database

Al crear un índice de texto completo, tiene que especificar un idioma de columna para la columna indizada. Las consultas de texto completo usarán el separador de palabras y los lematizadores del idioma especificado en la columna. Hay varios aspectos que deben tenerse en cuenta al elegir el idioma de columna cuando se crea un índice de texto completo. Estas consideraciones se refieren al modo en que se acorta el texto y se indiza a continuación mediante el motor de texto completo.

Nota:

Para especificar un idioma de columna para una columna de índice de texto completo, use la cláusula LANGUAGE language_term al especificar la columna. Para obtener más información, vea CREATE FULLTEXT INDEX (Transact-SQL) y ALTER FULLTEXT INDEX (Transact-SQL).

Compatibilidad con idiomas en la búsqueda de texto completo

Esta sección proporciona una introducción a los separadores de palabras y lematizadores, y explica cómo usa la búsqueda de texto completo el LCID del idioma de columna.

Introducción a los separadores de palabras y lematizadores

SQL Server 2008 (10.0.x) y las versiones posteriores incluyen una nueva familia completa de separadores de palabras y lematizadores que son considerablemente mejores que los que estaban disponibles anteriormente en SQL Server.

Nota:

El grupo de idiomas naturales de Microsoft, Microsoft Natural Language Group (MS NLG), implementó estos nuevos componentes lingüísticos y los admite.

Los nuevos separadores de palabras proporcionan las ventajas siguientes:

  • Solidez

    Las pruebas han demostrado que los nuevos separadores de palabras son sólidos en entornos de consulta sometidos a una presión elevada.

  • Seguridad

    Los nuevos separadores de palabras están habilitados de forma predeterminada en SQL Server gracias a las mejoras de seguridad de los componentes lingüísticos. Se recomienda encarecidamente que se firmen los componentes externos, como son los separadores de palabras y los filtros, con el fin de mejorar la seguridad global y la solidez de SQL Server. Puede configurar el texto completo para comprobar que estos componentes se firman de la forma siguiente:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • Calidad

    Los separadores de palabras se han rediseñado y las pruebas muestran que los nuevos proporcionan una mejor calidad semántica que los anteriores. De esta forma, se incrementa la exactitud de recuperación.

  • Los separadores de palabras, con cobertura de una amplia lista de idiomas, se incluyen en SQL Server directamente y se habilitan de forma predeterminada.

Para obtener una lista de los idiomas para los que SQL Server incluye un separador de palabras y lematizadores, vea sys.fulltext_languages (Transact-SQL).

Cómo usa la búsqueda de texto completo el nombre del idioma de columna

Al crear un índice de texto completo, tiene que especificar un nombre de idioma válido para cada columna. Si un nombre de idioma es válido pero no lo devuelve la vista de catálogo sys.fulltext_languages (Transact-SQL), la búsqueda de texto completo vuelve al nombre de idioma disponible más próximo de la misma familia de idiomas, si lo hubiera. De lo contrario, la búsqueda de texto completo retrocede al separador de palabras neutro. Este comportamiento de retroceso podría afectar a la exactitud de recuperación. Por consiguiente recomendamos encarecidamente que especifique un nombre de idioma válido y disponible para cada columna al crear un índice de texto completo.

Nota:

El LCID se usa con todos los tipos de datos aptos para la indexación de texto completo (como char o nchar). Aunque el criterio de ordenación de una columna de tipo char, varcharo text esté establecido en una configuración de idioma distinta del identificado por el LCID, el LCID se usa de todos modos durante la indexación de texto completo y en las consultas de esas columnas.

Separación de palabras

Un separador de palabras acorta el texto que se va a indizar en límites de palabras, que son específicas del idioma. Por consiguiente, el comportamiento de separación de palabras difiere entre los diferentes idiomas. Si usa un idioma, x, para indizar varios idiomas {x, y, z}, parte del comportamiento podría producir resultados inesperados. Por ejemplo un guión (-) o una coma (,) podrían ser elementos separadores de palabras que no se tienen en cuenta en un idioma, pero sí en otro. También, en raras ocasiones, se podría producir un comportamiento de lematización inesperado debido a que una palabra determinada podría derivarse de manera diferente en idiomas distintos. Por ejemplo, en inglés estos límites de palabras suelen ser espacios en blanco o alguna forma de puntuación. En otros idiomas, como el alemán, las palabras o caracteres se pueden combinar. Por consiguiente, el idioma de columna que elija debería representar el idioma que espera que se almacene en las filas de esa columna.

Idiomas occidentales

Para la familia de idiomas occidentales, si duda de qué idiomas se van a almacenar en una columna o espera que se almacene más de uno, una solución alternativa general es utilizar el separador de palabras para el idioma más complejo que pueda almacenarse en la columna. Por ejemplo, imagine que en una columna cree que puede almacenarse contenido en inglés, español y alemán. Estos tres idiomas occidentales poseen patrones de separación de palabras muy similares y los patrones del alemán son los más complejos. Por consiguiente, una buena opción en este caso sería utilizar el separador de palabras alemán, que debería poder procesar correctamente el texto inglés y español. Por el contrario, el separador de palabras inglés no podría procesar perfectamente el texto alemán debido a sus palabras compuestas.

Tenga en cuenta que al utilizar el separador de palabras del idioma más complejo de una familia de idiomas, no se garantiza una indización perfecta de todos los idiomas de la familia. Podrían darse casos excepcionales en los que el separador de palabras más complejo no pudiera tratar correctamente el texto escrito en otro idioma.

Idiomas no occidentales

Para los idiomas no occidentales (como el chino, japonés, hindi, etc.) la solución alternativa anterior no funciona necesariamente, por razones lingüísticas. En los idiomas no occidentales, considere una de las soluciones alternativas siguientes:

  • Para idiomas de familias diferentes

    Si una columna puede contener idiomas drásticamente diferentes, por ejemplo, español y japonés, considere almacenar el contenido de los distintos idiomas en columnas independientes. Esto le permitiría utilizar el separador de palabras específico del idioma para cada columna. Si elige esta solución y no conoce el idioma de las consultas en el momento de la consulta, puede que tenga que emitir la consulta en ambas columnas para asegurarse de que encuentra la fila o documento correctos.

  • Para contenido binario (como los documentos de Microsoft Word)

    Cuando el contenido indexado es del tipo binary , el filtro de la búsqueda de texto completo que procesa el contenido de texto antes de enviarlo al separador de palabras podría observar las etiquetas del idioma concreto que existan dentro del archivo binario. En este caso, en el momento de la indización, el filtro emitirá el LCID correcto para un documento o sección de un documento. A continuación, el motor de texto completo llamará al separador de palabras del idioma con ese LCID. Sin embargo, después de indizar contenido de varios idiomas, recomendamos que compruebe que la operación se realizó correctamente.

  • Para contenido de texto simple

    Cuando el contenido sea texto simple, puede convertirlo al tipo de datos xml y agregar etiquetas de idioma que indiquen el idioma que corresponde a cada documento concreto o sección del documento. Para que esto funcione, sin embargo, tiene que conocer el idioma antes de la indización de texto completo.

Raíz

Una consideración adicional al elegir el idioma de columna es la lematización. En las consultas de texto completo, lalematización es un proceso de búsqueda de todas las formas con inflexión de una palabra en un idioma determinado. Al utilizar un separador de palabras genérico para procesar varios idiomas, el proceso de lematización solo funciona para el idioma especificado de la columna, no para otros idiomas de la misma. Por ejemplo, los lematizadores de alemán no funcionan para inglés o español (etc.). Esto podría afectar a su recuperación, según el idioma que elija en el momento de la consulta.

Efecto del tipo de columna en la búsqueda de texto completo

Otra consideración en la elección del idioma se refiere al modo en que se representan los datos. En los datos que no se almacenan en la columna varbinary(max) , no se realiza ningún proceso de filtro especial. sino que el texto suele pasarse por el componente separador de palabras tal y como es.

Además, los separadores de palabras se han diseñado principalmente para procesar el texto escrito. Por ello, si el texto contiene algún tipo de marcado (por ejemplo, HTML), es posible que los procesos de indización y búsqueda no se realicen con gran precisión lingüística. En ese caso, tiene dos opciones: el método preferido es almacenar simplemente los datos de texto en la columna varbinary(max) , o bien indicar su tipo de documento para poder filtrarlo. o utilizar el separador de palabras neutral y, si es posible, agregar datos de marcado (como 'br' en HTML) a las listas de palabras irrelevantes.

Nota:

La lematización basada en el idioma no interviene cuando se especifica el idioma neutral.

Especificar un idioma de columna no predeterminado en una consulta de texto completo

De forma predeterminada, en SQL Server, la búsqueda de texto completo analiza los términos de consulta usando el idioma especificado para cada columna que se incluya en la cláusula de texto completo. Para invalidar este comportamiento, especifique un idioma no predeterminado en el momento de la consulta. Para los idiomas admitidos cuyos recursos estén instalados, se puede usar la cláusula LANGUAGE language_term de una consulta CONTAINS, CONTAINSTABLE, FREETEXTo FREETEXTTABLE para especificar el idioma que se usa para la separación de palabras, la lematización, el diccionario de sinónimos y el procesamiento de las palabras irrelevantes de los términos de las consultas.

Consulte también

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipos de datos (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Configurar y administrar filtros para búsquedas
sp_fulltext_service (Transact-SQL)
sys.fulltext_languages (Transact-SQL)
Configurar y administrar separadores de palabras y lematizadores para la búsqueda