2010-09-30 15 views
9

Intento diseñar mi aplicación para encontrar las entradas de la base de datos que son similares.Encontrar filas similares en la base de datos

Vamos a adoptar, por ejemplo la tabla coche (Todo en una misma mesa para mantener el ejemplo sencillo):

CarID | Car Name | Brand | Year | Top Speed | Performance | Displacement | Price 
1   Z3   BMW  1990 250   5.4   123   23456 
2   3er   BMW  2000 256   5.4   123   23000 
3   Mustang  Ford 2000 190   9.8   120   23000 

Ahora quiero hacer consultas así:

"Buscar por vehículos similares a Z3 (todas las marcas) "(ignorar" Nombre del automóvil ")

Similar en este contexto significa que la fila donde la mayoría de las columnas son exactamente iguales es la más similar.

En este ejemplo sería "3er BMW", ya que 2 columnas (Rendimiento y los desplazamientos son los mismos)

¿Me puede dar consejos cómo diseñar consultas de bases de datos/aplicación de esa manera. La aplicación va a ser muy grande con muchas entradas.

También agradecería enlaces útiles o libros. (No hay problema para mí Para investigar más si sé dónde buscar o qué leer)

Respuesta

3

usted podría tratar de dar a cada registro de una 'puntuación' en función de sus campos

Se podría sopesar la puntuación de una columna en función de qué tan importante es la propiedad para la comparación (por ejemplo, la velocidad máxima podría ser más importante que la marca)

Al final obtendrá un puntaje por cada registro, y podrá encontrar registros similares al comparar puntajes y encontrar los registros que son +/- 5% (por ejemplo) del registro que está buscando

+1

Podría ser una función de 'distancia' para cada campo para indicar qué tan separados están dos valores para los campos. Esto podría multiplicarse por el peso del campo y los valores sumados. Estoy pensando en procedimientos almacenados. – aaronasterling

2

Los métodos de búsqueda de relaciones y similitudes en los datos se llama Data Mining, en su caso de que ya podría intentar clustering y classify sus datos con el fin de ver cuáles son los diferentes grupos que aparece.

Creo que this book es un buen comienzo para una introducción a la minería de datos. Espero que esto ayude.

2

Para resolver su problema, tiene que usar un cluster algorithm. Primero, necesita definir una métrica de similitud, que necesita contar la similitud entre sus tuplas de entrada (todas Z3) y el resto de la base de datos. Puede acelerar el proceso utilizando algoritmos, como k-means. Por favor, eche un vistazo a esta pregunta, allí encontrará una discusión sobre un problema similar al suyo - Finding groups of similar strings in a large set of strings.

Este enlace es muy útil también: http://matpalm.com/resemblance/.

En cuanto a la implementación si tiene muchas tuplas (y más de varias máquinas) puede usar http://mahout.apache.org/. Es un marco de aprendizaje automático basado en hadoop. Necesitará una gran cantidad de potencia de cálculo, porque los algoritmos de clúster son complejos.

1

No es realmente una respuesta a su pregunta, pero usted dice que tiene muchas entradas, debe considerar normalizing la tabla del automóvil, mover la marca a una tabla separada y "Nombre del automóvil"/modelo a una tabla separada. Esto reducirá la cantidad de datos para comparar durante las búsquedas.

+0

Sí seguro. Solo quería tener una mesa en el ejemplo. Mi aplicación no se trata de automóviles en absoluto. – Ben

Cuestiones relacionadas