/ / Sortowanie SQL z wieloma atrybutami (kolejność według zgodności) - sql, sql-server

Sortowanie SQL z wieloma atrybutami (kolejność według zgodności) - sql, sql-server

Mam tabelę z pewnymi atrybutami, takimi jakimię i adres. W polu wyszukiwania chcę pozwolić użytkownikom systemu wpisać wszystko, co wiedzą o tych osobach, i zwrócić wyniki w tabeli. Oczywiście chcę, aby wyniki, które najlepiej pasowały, były na szczycie.

  1. Czy ranking powinien być wykonywany w poleceniu SQL, czy są inne sposoby, które mogą działać lepiej?
  2. Czy ktoś zna dobry sposób na uporządkowanie / uszeregowanie wyników w oparciu o najwyższą zgodność? Zasadniczo chcę, aby osoba pojawiła się na górze, która najbardziej pasuje do kryteriów wyszukiwania.

Możesz zobaczyć przykład tutaj: http://sqlfiddle.com/#!2/19e9ad

Dzięki za pomoc!

(Obecnie używam SQL Server, ale każda pomoc jest mile widziana.)

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz sprawdzić indeksy pełnotekstowe i wyszukiwania - mają opcje rankingu, które mogą wykonać zadanie za Ciebie:

... i wyszukiwanie informacji o funkcjonalności:

Możesz też pracować samodzielnierozwiązanie, takie jak parsowanie danych wejściowych użytkownika i dopasowywanie słowo po słowie, a następnie poprawianie wyników, które pasują do większej liczby słów, dokładne uporządkowanie słów itp. Ale będziesz musiał sam poradzić sobie z wieloma przypadkami (np. Miasta z wieloma słowami, takie jak „Nowy Jork” itp. .).


1 dla odpowiedzi nr 2

Wygląda na to, że prosisz o funkcję porównywania ciągów, taką jak Jaro-Winkler. Jest to wbudowana funkcja Oracle (http://docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_match.htm) i wyobrażam sobie wiele innych RDBM.

Jaro-Winkler jest całkiem niezły w rozpoznawaniustruny są po prostu w złej kolejności, a wynik będzie to odzwierciedlał. Przeprowadź kilka testów i zobacz, czy daje to oczekiwane rezultaty, ale bardzo często go wykorzystuję w swojej pracy (integracja danych klientów marketingowych). Opracowałem API, które zasadniczo to robi, ale z dużą dodaną złożonością, taką jak uwzględnianie pseudonimów itp. API jest w http://matchbox.io/#match-api.


0 dla odpowiedzi № 3

Możesz wykonać sortowanie w sql, ale najczęstszym rozwiązaniem jest sortowanie w interfejsie użytkownika, więc nie musisz żądać danych z bazy danych za każdym razem, gdy użytkownik zmienia kolejność sortowania.

szukając swojego, możesz dodać pole do zapytania, aby je pokazać comformity coś jak

 SELECT *, function_comformity() as comformity

Możesz więc dokonać sortowania w interfejsie użytkownika dla tego pola, tak jak w przypadku nazwy lub kodu pocztowego.