Compartir a través de


Elegir un idioma al crear un índice de texto completo

Al crear un índice de texto completo, debe especificar un idioma de nivel de columna para la columna indizada. Las consultas de texto completo de la columna usarán el separador de palabras y los lematizadores del idioma especificado. Hay un par de aspectos que se deben tener en cuenta al elegir el idioma de columna al crear un índice de texto completo. Estas consideraciones se relacionan con la forma en que el texto se tokeniza y, a continuación, se indexa mediante Full-Text Engine.

Nota:

Para especificar un idioma de nivel 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 Full-Text

En esta sección se proporciona una introducción a separadores de palabras y lematizadores, y se describe cómo la búsqueda de texto completo usa el LCID del lenguaje de nivel de columna.

Introducción a separadores de palabras y lematizadores

SQL Server 2008 y versiones posteriores incluyen una nueva familia completa de separadores de palabras y lematizadores que son significativamente mejores que los que estaban disponibles anteriormente en SQL Server.

Nota:

Microsoft Natural Language Group (MS NLG) implementado y admite estos nuevos componentes lingüísticos.

Los nuevos separadores de palabras proporcionan las siguientes ventajas:

  • Robustez

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

  • Seguridad

    Los nuevos separadores de palabras están habilitados de forma predeterminada en SQL Server gracias a las mejoras de seguridad en los componentes lingüísticos. Se recomienda encarecidamente firmar componentes externos como separadores de palabras y filtros para mejorar la seguridad general y la solidez de SQL Server. Puede configurar el texto completo para comprobar que estos componentes están firmados de la siguiente manera:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • Calidad

    Se han rediseñado los separadores de palabras y las pruebas han demostrado que los nuevos separadores de palabras proporcionan una mejor calidad semántica que los separadores de palabras anteriores. Esto aumenta la precisión de la recuperación.

  • La cobertura de una amplia lista de idiomas, los separadores de palabras se incluyen en SQL Server de fábrica y están habilitados 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 Full-Text Search usa el nombre del idioma Column-Level

Al crear un índice de texto completo, debe especificar un nombre de idioma válido para cada columna. Si un nombre de idioma es válido pero no devuelto por la vista de catálogo de sys.fulltext_languages (Transact-SQL), la búsqueda de texto completo vuelve al nombre de idioma disponible más cercano de la misma familia de idiomas, si existe. De lo contrario, la búsqueda de texto completo vuelve al separador de palabras neutral. Este comportamiento de reserva podría afectar a la precisión de la recuperación. Por lo tanto, se recomienda encarecidamente especificar un nombre de idioma válido y disponible para cada columna al crear un índice de texto completo.

Nota:

El LCID se usa en todos los tipos de datos aptos para la indexación de texto completo (como char o nchar). Si tiene el criterio de ordenación de una charcolumna de tipo , varcharo text establecida en una configuración de idioma diferente del idioma identificado por el LCID, el LCID se usa de todos modos durante la indexación de texto completo y la consulta de esas columnas.

Separación de palabras

Un separador de palabras tokeniza el texto que se indexa en los límites de palabras, que son específicos del idioma. Por lo tanto, el comportamiento de separación de palabras difiere entre diferentes idiomas. Si usa un idioma, x, para indizar un número de idiomas {x, y y ,z}, parte del comportamiento podría provocar resultados inesperados. Por ejemplo, un guión (-) o una coma (,) podría ser un elemento de salto de palabras que se desechará en un idioma, pero no en otro. También rara vez puede ocurrir un comportamiento inesperado de lematización porque una palabra determinada puede lematizarse de manera diferente en distintos idiomas. Por ejemplo, en el idioma inglés, los límites de palabra suelen ser espacios en blanco o alguna forma de puntuación. En otros idiomas, como alemán, palabras o caracteres se pueden combinar. Por lo tanto, el idioma de nivel de columna que elija debe representar el idioma que espera se almacenará en filas de esa columna.

Idiomas occidentales

Para la familia occidental de idiomas, si no está seguro de qué idiomas se almacenarán en una columna o espera que se almacenen más de uno, una solución alternativa general es usar el separador de palabras para el idioma más complejo que se puede almacenar en la columna. Por ejemplo, es posible que espere almacenar contenido inglés, español y alemán en una sola columna. Estos tres idiomas occidentales poseen patrones muy similares de separación de palabras, con los patrones alemanes siendo los más complejos. Por lo tanto, una buena opción es usar el separador de palabras alemán, que debería poder procesar correctamente el texto inglés y español. En cambio, es posible que el separador de palabras en inglés no procese perfectamente el texto alemán debido a las palabras compuestas del alemán.

Tenga en cuenta que el uso del separador de palabras del idioma más complejo de una familia de idiomas no garantiza la indexación perfecta de todos los idiomas de la familia. Podrían existir casos extremos donde el separador de palabras más complejo no pueda manejar correctamente el texto escrito en otro idioma.

Idiomas no occidentales

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

  • Para idiomas de diferentes grupos lingüísticos

    Si una columna puede contener idiomas considerablemente diferentes, por ejemplo, español y japonés, considere la posibilidad de almacenar el contenido de diferentes idiomas en columnas independientes. Esto le permitiría usar el separador de palabras específico del lenguaje para cada columna. Si elige esta solución y no conoce el lenguaje de consulta en el momento de la consulta, es posible que tenga que emitir la consulta en ambas columnas para asegurarse de que la consulta encuentra la fila o documento correctos.

  • Para contenido binario (como documentos de Microsoft Word)

    Cuando el contenido indexado es de binary tipo , el filtro de búsqueda de texto completo que procesa el contenido textual antes de enviarlo al separador de palabras podría respetar etiquetas de idioma específicas existentes dentro del archivo binario. En este caso, en el momento de la indexación, el filtro emitirá el LCID adecuado para un documento o sección de un documento. A continuación, el motor Full-Text llamará al separador de palabras para el idioma con ese LCID. Sin embargo, después de indexar contenido de varios idiomas, se recomienda comprobar que el contenido se indizó correctamente.

  • Para contenido de texto sin formato

    Cuando el contenido es texto sin formato, puede convertirlo al xml tipo de datos y agregar etiquetas de idioma que indiquen el idioma correspondiente a cada documento o sección de documento específico. Para que esto funcione, sin embargo, debe conocer el idioma antes de la indexación de texto completo.

Raíz

Una consideración adicional al elegir el idioma a nivel de columna es la derivación. La derivación en consultas de texto completo es el proceso de buscar todas las formas derivadas (inflectionales) de una palabra en un idioma determinado. Cuando se usa un separador de palabras genérico para procesar varios idiomas, el proceso de lematización solo funciona para el idioma especificado para la columna, no para otros idiomas de la columna. Por ejemplo, los lematizadores alemanes no funcionan para inglés o español (etc.). Esto puede afectar a la recuperación en función del idioma que elija en el momento de la consulta.

Efecto del tipo de columna en la búsqueda de Full-Text

Otra consideración en la elección del idioma está relacionada con cómo se representan los datos. En el caso de los datos que no se almacenan en varbinary(max) la columna, no se realiza ningún filtrado especial. En su lugar, el texto se pasa generalmente a través del componente de separación de palabras as-is.

Además, los separadores de palabras están diseñados principalmente para procesar texto escrito. Por lo tanto, si tiene algún tipo de marcado (como HTML) en el texto, es posible que no obtenga una gran precisión lingüística durante la indexación y la búsqueda. En ese caso, tiene dos opciones: el método preferido es simplemente almacenar los datos de texto en varbinary(max) la columna y indicar su tipo de documento para que se pueda filtrar. Si no es una opción, puede considerar la posibilidad de usar el separador de palabras neutro 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 entra en juego al especificar el idioma neutro.

Especificar un idioma de Column-Level no predeterminado en una consulta de Full-Text

De forma predeterminada, en SQL Server, la búsqueda de texto completo analizará los términos de consulta mediante el idioma especificado para cada columna que se incluye en la cláusula de texto completo. Para invalidar este comportamiento, especifique un lenguaje no predeterminado en el momento de la consulta. En el caso de los idiomas admitidos cuyos recursos están instalados, la cláusula LANGUAGE language_term de una consulta CONTAINS, CONTAINSTABLE, FREETEXT o FREETEXTTABLE se puede usar para especificar el idioma utilizado para la separación de palabras, la derivación de palabras, el diccionario de sinónimos y el procesamiento de palabras irrelevantes de los términos de consulta.

Véase 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