2010-09-30 16 views
9

Próbuję zaprojektować swoją aplikację, aby znaleźć podobne wpisy do bazy danych.Znajdź podobne wiersze w bazie danych

Załóżmy, na przykład wziąć tabelę samochód (wszystko w jednej tabeli, aby utrzymać przykład proste):

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 

Teraz chcę zrobić kwerendy tak:

„Szukaj Samochody podobne do Z3 (wszystkie marki) "(ignoruj" Nazwa samochodu ")

Podobny w tym kontekście oznacza, że ​​wiersz, w którym większość kolumn jest dokładnie taka sama, jest najbardziej podobny.

W tym przykładzie byłoby to „3er BMW” od 2 kolumny (działanie i przemieszczenia są takie same)

możesz dać mi wskazówki, jak zaprojektować zapytań do bazy danych/aplikacji w taki sposób. Aplikacja będzie naprawdę duża z wieloma wpisami.

Również byłbym wdzięczny za przydatne linki lub książki. (Nie ma problemu dla mnie do dalszych badań, jeśli wiem, gdzie szukać i co czytać)

Odpowiedz

3

można spróbować dać każdy rekord jest „wynik” w zależności od swoich dziedzinach

mógł ważyć wynik kolumnie w zależności od jak ważna jest właściwość do porównania (na przykład maksymalna prędkość może być ważniejsza niż marka)

Otrzymasz wynik za każdy rekord, a będziesz mógł znaleźć podobne rekordy porównując wyniki i znalezienie rekordy, które wynoszą +/- 5% (na przykład) rekordu, którego szukasz:

+1

Mogę do tego funkcji "odległość" dla każdego pola, aby powiedzieć, jak daleko od siebie dwie wartości dla pól. Można to pomnożyć przez masę pól i zsumowane wartości. Myślę o procedurach przechowywanych. – aaronasterling

2

Metody znalezienie relacji i podobieństwa danych jest nazywany Data Mining, w twoim przypadku można już spróbować clustering i classify swoje dane, aby zobaczyć, jakie są różne grupy które się pojawiają.

Myślę, że this book jest dobrym początkiem wprowadzenia do eksploracji danych. Mam nadzieję że to pomoże.

2

Aby rozwiązać problem, należy użyć urządzenia cluster algorithm. Najpierw musisz zdefiniować metrykę podobieństwa, niż musisz policzyć podobieństwo między twoimi krotkami wejściowymi (wszystkie Z3) i resztą bazy danych. Możesz przyspieszyć proces za pomocą algorytmów, takich jak k-means. Proszę spojrzeć na to pytanie, tam znajdziesz dyskusję na temat podobnego problemu, jak twój - Finding groups of similar strings in a large set of strings.

Ten link jest również bardzo pomocny: http://matpalm.com/resemblance/.

Jeśli masz dużo krotek (i więcej niż kilka maszyn), możesz użyć http://mahout.apache.org/. Jest to szkielet uczenia maszynowego oparty na hadoopie. Będziesz potrzebował dużej mocy obliczeniowej, ponieważ algorytmy klastrów są złożone.

1

Naprawdę nie jest to odpowiedź na twoje pytanie, ale mówisz, że masz dużo zgłoszeń, powinieneś rozważyć zakup samochodu na stoliku samochodowym, przenieść Brand do oddzielnej tabeli i "Nazwa samochodu"/model do oddzielnej tabeli. Spowoduje to zmniejszenie ilości danych do porównania podczas wyszukiwania.

+0

Tak, na pewno. Chciałem mieć tylko jeden stół w tym przykładzie. Moja aplikacja w ogóle nie dotyczy samochodów. – Ben

Powiązane problemy