2012-07-01 18 views
5

Załóżmy, że mam listę osób w mojej datastore. Każda osoba tam może posiadają następujące pola:Jak prawidłowo zorganizować wyszukiwanie danej osoby?

  • nazwisko (*)
  • imię
  • drugie imię
  • id (*)
  • jazdy id licencji (*)
  • inny identyfikator (*)
  • data urodzenia
  • region
  • miejsce urodzenia

Przynajmniej jeden pól oznaczonych gwiazdką (*) musi istnieć.

Teraz użytkownik podaje mi tę samą listę pól (i ponownie co najmniej należy podać jeden pól oznaczonych (*)). Powinienem wyszukać użytkownika użytkownika. Ale nie wszystkie pola powinny być dopasowane. Powinienem pokazać użytkownikowi, jak jestem pewien w wynikach wyszukiwania. Coś jak:

  • jeśli osoba dopasowane id i last name (a użytkownikiem dostarczonych tylko te 2 pola do wyszukiwania), to jestem pewien, że wynik jest prawidłowy (100%);
  • jeśli dana osoba pasowała do id i last name (a użytkownik dostarczył inne pola, które zostały znalezione w bazie danych, ale nie zostały dopasowane), to jestem pewien, że wynik jest prawie poprawny o 60%;
  • itp

(numery są tylko jako przykład)

Jak mogę zorganizować taką wyszukiwanie? Czy istnieje jakiś standardowy algorytm? Chciałbym również ograniczyć liczbę żądań do bazy danych.

P.S. Nie mogę podać użytkownikowi faktycznych wartości pól z bazy danych.

Odpowiedz

1

Wygląda na to, że twoja logika określania jakości dopasowania będzie zbyt skomplikowana, aby obsłużyć ją w warstwie bazy danych. Myślę, że uzyskasz najlepszą wydajność, pobierając wszystkie rekordy, które pasują do co najmniej jednego z obowiązkowych kluczy, obliczając wynik meczu dla każdego z nich w pamięci i zwracając najlepszy wynik. Na przykład, jeśli użytkownik dostarcza Państwu id, nazwisko i miejsce urodzenia, zapytanie będzie wyglądać następująco:

SELECT * FROM users WHERE id = `the_id` OR last_name = `the_last_name`; 

To może być problem, wydajność, jeśli masz bardzo duży zbiór danych z dużą ilością wspólny nazwiska, ale poza tym spodziewałbym się, że nie zobaczę zbyt wielu kolizji. Możesz to sprawdzić na swoim własnym zbiorze danych poza GAE. Możesz także uzyskać lepszą wydajność, jeśli wszystkie pola obowiązkowe MUSZĄ pasować, zmieniając OR na AND.

Powiązane problemy