Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Base de datos de Azure SQL
Al crear un índice de texto completo, tiene que especificar un idioma de columna para la columna indizada. Las consultas de texto completo de la columna usan el separador de palabras y los lematizadores del idioma especificado. 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 relacionan con la forma en que el texto se tokeniza y, a continuación, se indexa mediante el motor de Full-Text.
Nota:
Para especificar un idioma de nivel de columna para una columna de índice de texto completo, use la LANGUAGE <language_term> cláusula al especificar la columna. Para obtener más información, vea CREATE FULLTEXT INDEX y ALTER FULLTEXT INDEX.
Compatibilidad con idiomas en Full-Text Search
En esta sección se proporciona una introducción a los separadores de palabras y lematizadores, y se describe cómo Full-Text Search usa el identificador de código de idioma (LCID) del lenguaje de nivel de columna.
Introducción a separadores de palabras y lematizadores
SQL Server incluye una familia completa de separadores de palabras y lematizadores. Microsoft Natural Language Group (NLG) implementa y admite estos componentes lingüísticos.
Los separadores de palabras proporcionan las siguientes ventajas:
Solidez
Las pruebas muestran que los separadores de palabras son sólidos en entornos de consulta de alta presión.
Seguridad
Los separadores de palabras están habilitados de forma predeterminada en SQL Server. 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:
EXECUTE sp_fulltext_service 'verify_signature';Calidad
Las pruebas internas muestran que los separadores de palabras proporcionan una mejor calidad semántica que los separadores de palabras 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, consulte sys.fulltext_languages.
Cómo Full-Text Search usa el nombre del idioma de nivel 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 devuelto por la vista de catálogo de sys.fulltext_languages , Full-Text Search vuelve al nombre de idioma disponible más cercano de la misma familia de idiomas, si existe. De lo contrario, Full-Text Search vuelve al separador de palabras neutral. 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 indexar varios idiomas {x, yy z}, parte del comportamiento podría provocar resultados inesperados. Por ejemplo, un guión (-) o una coma (,) puede ser un elemento de salto de palabras que se produce en un idioma, pero no 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 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 almacenar en filas de esa columna.
Idiomas occidentales
Para la familia occidental de idiomas, si no está seguro 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 usar el separador de palabras para el idioma más complejo que podría almacenarse 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 similares de separación de palabras, y los patrones alemanes 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.
El uso del separador de palabras del lenguaje más complejo de una familia de idiomas no garantiza la indexación perfecta de todos los idiomas de la familia. Los casos de esquina pueden existir en los que el separador de palabras más complejo no puede controlar correctamente el texto escrito en otro idioma.
Idiomas no occidentales
En el caso de idiomas no occidentales (como 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. Esta separación le permitiría usar el separador de palabras específico del lenguaje 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 de tipo binario , el filtro de búsqueda de Full-Text 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 emite el LCID adecuado para un documento o sección de un documento. A continuación, el motor de Full-Text llama al separador de palabras para el 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
Otra consideración al elegir el idioma de nivel de columna es lematización. La lematización en consultas de texto completo es el proceso de buscar todas las formas lematadas (inflectionales) 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 alemanes 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 Full-Text Search
Otra consideración en la elección del idioma se refiere al modo en que se representan los datos. Para los datos que no se almacenan en una columna varbinary(max), no se realiza ningún filtrado 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 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 una columna varbinary(max) y indicar su tipo de documento para que se pueda filtrar. Si no es una opción, es posible que considere 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 nivel de columna no predeterminado en una consulta de texto completo
De forma predeterminada, en SQL Server, Full-Text Search analiza 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 idioma no predeterminado en el momento de la consulta. En el caso de los idiomas admitidos cuyos recursos están instalados, la LANGUAGE <language_term> cláusula de una consulta CONTAINS, CONTAINSTABLE, FREETEXT o FREETEXTTABLE se puede usar para especificar el idioma utilizado para el procesamiento de palabras de separación de palabras, lematización, diccionario de sinónimos y palabra irrelevante de los términos de consulta.
Contenido relacionado
- CONTENIDO (Transact-SQL)
- CONTAINSTABLE (Transact-SQL)
- Tipos de datos (Transact-SQL)
- TEXTO LIBRE (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 (SQL Server)