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.
- Czy ranking powinien być wykonywany w poleceniu SQL, czy są inne sposoby, które mogą działać lepiej?
- 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 № 1Moż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.