9

¿Hay alguna manera de usar FULLTEXT en una tabla multilingüe sin dar a cada idioma su propia columna?búsqueda FULLTEXT con una columna en varios idiomas

tengo una columna que tenga que buscar, pero el idioma en el que la columna varía:

ProductID int 
Description nvarchar(max) 
Language  char(2) 

Language puede ser uno de: en, de, it, kr, th

Actualmente construyo una concordancia y uso que para buscar. Pero esto es solo para inglés, alemán e italiano, e incluso para aquellos que no admiten stemming. Todo lo demás usa LIKE '%searchterm%', y estoy tratando de mejorarlo.

estoy usando SQL Server 2005.

Respuesta

11

En lugar de una columna separada para cada idioma, si usted sabe qué filas contienen el idioma que podría crear una vista indizada filtrada para incluir sólo las filas de una sola lengua y por langauge FTI cada uno de esos. Sin embargo, deberá consultar cada vista individualmente.

+0

No había pensado en usar vistas, eso podría funcionar. – egrunin

2

Citando la referencia de Microsoft en CREATE FULLTEXT INDEX:

Para las columnas no BLOB y no XML datos de texto que contienen en múltiples idiomas, o para los casos en que la lengua del texto almacenados en la se desconoce la columna, podría ser apropiado para usar el recurso de idioma neutral (0x0). Sin embargo, primero debe comprender las posibles consecuencias del uso del recurso de idioma neutral (0x0). Para información sobre las posibles soluciones y las consecuencias de usar el recurso de idioma neutral (0x0), ver Best Practices for Choosing a Language When Creating a Full-Text Index.

+0

Esas páginas básicamente dicen: no. – egrunin

2

Estoy usando vistas para más de 20 idiomas. Funciona bien para consultar (si es un poco complejo para seleccionar la vista correcta para usar en sprocs). Sin embargo, las inserciones y actualizaciones en la tabla subyacente se ven afectadas, ya que el plan parece necesitar incluir una verificación en cada vista, incluso sin seguimiento de cambios.

+0

Gracias. Ahora estoy trabajando en otro lado, pero nunca se sabe lo que podría ocurrir mañana :) – egrunin

4

Sé que esta es una pregunta antigua, pero acabo de encontrarla.

Un enfoque que he visto es utilizar una columna XML y especificar el atributo xml:lang. Como se menciona en CREATE FULLTEXT INDEX (Transact-SQL).

Para los documentos almacenados en XML o columnas de tipo BLOB, la codificación de idioma dentro del documento se utilizará durante la indexación. Para el ejemplo , en columnas XML, el atributo xml: lang en documentos XML será para identificar el idioma. En el momento de la consulta, el valor previamente especificado en language_term se convierte en el idioma predeterminado utilizado para las consultas de texto completo a menos que language_term se especifique como parte de una consulta de texto completo .

El principal inconveniente de este enfoque es que cambia el tipo de datos a XML, pero parecía funcionar bien para nuestras necesidades en ese momento.

+0

Voy a ver esto, gracias. – egrunin

Cuestiones relacionadas