Prácticas recomendadas para elegir un idioma al crear un índice de texto completo
Al crear un índice de texto completo, tiene que especificar un idioma de columna para la columna indizada. Las consultas de texto completo utilizará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, utilice 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).
Separadores 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 utiliza un idioma x para indizar varios idiomas {x, y 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 indizado 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 sin formato
Cuando el contenido sea texto sin formato, 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.
Lematización
Una consideración adicional al elegir el idioma de columna es la lematización. En las consultas de texto completo, la lematizació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 sólo 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 método de almacenamiento de datos 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 tal caso, tiene dos opciones: almacenar simplemente los datos de texto en la columna varbinary(max) e indicar su tipo de documento para poder filtrarlos (es el método preferido), 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 2008, la búsqueda de texto completo analizará los términos de consulta utilizando 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, la cláusula LANGUAGE language_term de una consulta CONTAINS, CONTAINSTABLE, FREETEXT o FREETEXTTABLE se puede utilizar 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.
Compatibilidad con idiomas
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 incluye una nueva familia completa de separadores de palabras y lematizadores que son significativamente 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 2008 gracias a las mejoras de seguridad de los componentes lingüísticos. Recomendamos encarecidamente que se firmen los componentes externos, como son los separadores de palabras y los filtros, con el fin de mejorar la seguridad total 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. Esto aumenta la exactitud de recuperación para los usuarios de SQL Server 2008.
Alcance
Para una inmensa lista de idiomas, los separadores de palabras se incluyen en SQL Server 2008 directamente y se habilitan de forma predeterminada.
Para obtener una lista de los idiomas para los que SQL Server 2008 incluye un separador de palabras y lematizadores, vea sys.fulltext_languages (Transact-SQL).
Separadores de palabras de terceros
Hay varios separadores de palabras externos de otros fabricantes disponibles para SQL Server 2008. Puede registrarlos manualmente. Para obtener más información, vea Cómo cargar separadores de palabras de terceros con licencia.
Después de cargar los separadores de palabras externos (de otros fabricantes), necesita actualizar la lista de idiomas admitidos de texto completo ejecutando el procedimiento almacenado del sistema sp_fulltext_service especificando la opción update_languages, como sigue:
EXEC sp_fulltext_service 'update_languages';
La vista de catálogo sys.fulltext_languages mostrará una lista de los idiomas de los separadores de palabras cargados recientemente.
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 existe. 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 utiliza con todos los tipos de datos elegibles para la indización de texto completo (como char o nchar). Aunque el criterio de ordenación de una columna de tipo char, varchar o text esté establecido en una configuración de idioma distinta del identificado por el LCID, el LCID se usa de todos modos durante la indización de texto completo y en las consultas de esas columnas.
Vea también