SQL Fuzzy Matching

Espero no estar repitiendo esta pregunta. Hice una búsqueda aquí y google antes de publicar aquí.

Estoy ejecutando un eStore con SQL Server 2008R2 con texto completo habilitado.

Mis requerimientos,Hay una Tabla de productos, que tiene el nombre del producto, Códigos OEM, Modelo en el que encaja este producto. Todos están en texto.He creado una nueva columna llamada TextSearch. Esto tiene valores concatenados del Nombre del producto, el Código OEM y el Modelo en los que se ajusta este producto. Estos valores están separados por comas.Cuando un cliente ingresa una palabra clave, ejecutamos la búsqueda en la columna TextSearch para que coincida con los productos. Vea la lógica correspondiente a continuación.

Estoy usando un texto completo híbrido y me gusta hacer búsquedas. Esto da resultados más relevantes. Todas las consultas ejecutadas en una tabla temporal y distinciones fueron devueltas.

Lógica coincidente,

Ejecute el siguiente SQL para obtener el producto relevante utilizando texto completo. Pero @Keywords será preprocesado. Diga que 'CLC 2200' se cambiará a 'CLC * AND 2200 *'

SELECCIONE ID desde dbo.Product DONDE CONTIENE (TextSearch, @ Keywords)

Otra consulta se ejecutará utilizando normal como. Por lo tanto, 'CLC 2200' se preprocesará en 'TextSearch como% clc% Y TextSearch como% 2200%'. Esto es simplemente porque la búsqueda de texto completo no buscará patrones antes de las palabras clave. ejemplo, no devolverá 'pclc 2200'.

SELECCIONE ID DE dbo.Product DONDE TextSearch como '% clc%' Y TextSearch like '% 2200%'

Si los pasos 1 y 2 no devolvieron ningún registro, se ejecutará la búsqueda siguiente. El valor 135 fue ajustado por mí para devolver registros más relevantes.

SELECCIONE p.id DE dbo.Product AS p INNER JOIN FREETEXTTABLE (producto, TextSearch, @ Keywords) AS r ON p.Id = r. [TECLA] DONDE r.RANK> 135

Todo lo anterior funciona bien en una velocidad razonable y devuelve productos relevantes para palabras clave.

Pero estoy buscando para mejorar aún más cuando no se encuentra ningún producto en absoluto.

Diga que si el cliente busca 'CLC 2200npk' y este producto no estaba allí, necesitaba mostrarlo muy cerca de 'CLC 2200'.

Hasta ahora he intentado usarSoundex () función. Compre el valor informático de soundex para cada palabra en la columna TextSearch y compare con el valor soudex de la palabra clave. Pero esto devuelve demasiados registros y también lento.

Por ejemplo, 'CLC 2200npk' devolverá productos como 'CLC 1100', etc. Pero este no sería un buen resultado. Como no está cerca de CLC 2200npk

Hay otra buenaaquí. pero esto utiliza funciones CLR. Pero no puedo instalar funciones de CLR en el servidor.

Así que mi lógica tendría que ser,

si no se encuentra 'CLC 2200npk', muestre el cercano 'CLC 2200' si no se encuentra 'CLC 2200', muestre el próximo cierre por 'CLC 1100'

Preguntas¿Es posible hacer coincidir como se sugiere?Si tuviera que hacer corrección de ortografía y búsqueda, ¿cuál sería la mejor manera? Todo nuestro listado de productos está en inglés.¿Hay algún UDF o SP que coincida con textos como mis sugerencias?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta