Skocz do zawartości

[MySQL] Wyszukiwanie dopasowanych fraz


MaxGaming

Rekomendowane odpowiedzi

Potrzebuję zrobić prostą wyszukiwarkę treści w bazie danych na wzór wyszukiwarki internetowej. Tym co mnie zastanawia jest jak skutecznie i w miare optymalnie wyszukiwać najbardziej dopasowane frazy. W MySQL wiem, że wystepuje wyrażenie "like", ale ono szuka dokładnie takich samych wyrazów.

1. Oczekuję takiego efektu, że chcę np. znaleźć 20 wynków. W pierwszej kolejności szukam tych wyników w których zawarte jest minimum 80% kolejnych znaków z fraz wyszukiwanych. Np.: wyszukujemy "Widok z okna", więc najpierw szukamy wyników które zawierają trzy wyrazy "Widok", "z", "okna". Następnie te które o maksymalnie 20% się różnią(czyli mamy 10 znaków, czyli mogą się różnić o 2 kolejny znak) np. "Widok z ok(na)", "Widok (z ok)na". Kolejnych mam na myśli, że porównujemy całe wyrazy np "ok" z "okna", a nie szukamy liter w całej wyszukiwanej frazie, bo wtedy wpisanie frazy "abcde.....z" oznaczałoby wyszukanie wszystkiego.

2. Jeśli te wyniki które spełniają limit 80% podobieństwa nie wystarczą, aby uzyskać 20 wyników, dobieramy te z 70% skutecznością i tak dalej, aż otrzymamy 20 wyników(20 to liczba przykładowa, prawodpobnie bedzie chodziło o większą ilość).

 

Teraz pytanie, czy wgl jest na to jakiś sposób? Czy trzebaby wyciągąc z MySQL wszystkie rekordy i dopiero w PHP realizować taki algorytm?

 

Z góry dzięki i pozdrawiam,

MaxGaming

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Do tego raczej używa się SOLRa, Sphinx, Lucene. Tu masz przykład, ale generalnie to trudna sprawa, zwłaszcza na hostingach bez możliwości instalacji własnego oprogramowania. https://stackoverflow.com/questions/3338889/how-to-find-similar-results-and-sort-by-similarity

Odnośnik do komentarza
Udostępnij na innych stronach

1. Nie ma jakiejś alternatywnej metody w przypadku serwerów bez możliwości instalacji zewnętrznego oprogramowania?

2. Jak bardzo przeciążył bym serwer gdybym pisał to w PHP?

3. Czy są hostingi które oferują opcję zainstalowania takiego oprogramowania, ale nie działają jak klasyczny VPS, gdzie wszystko trzeba instalować i konfigurować od podstaw samemu?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

1. nope

2. Generalnie, ktoś by to już napisał w PHP jakby to tak hop-siup było ;) Jakąś namiastkę możesz, to zależało by od ilości danych i gości

3. Można zawsze zainstalować cPanel / DirectAdmin i nie musisz tyle konfigurować, wyklikujesz jak na hostingu www.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

2. możesz pobawić się z http://php.net/manual/en/function.levenshtein.php na wynikach (i pokrewne funkcje z sekcji See Also)

3. Droższe rozwiązanie, ale istnieje, np.: https://www.hekko.pl/hosting_dedykowany.html

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

@MaxGaming jest jeszcze inne rozwiązanie. Zamień MySQL na PostgreSQL, który oferuje fuzzy text searching za pomocą rozszerzenia pg_trgm. Tutaj masz prostego tutka: https://www.rdegges.com/2013/easy-fuzzy-text-searching-with-postgresql/ 

  

Nie wiem jak to jest na webhostingach z włączaniem rozszerzeń (używam VPS), ale pobieżnie sprawdziłem przykładowo rozwiązania bazodanowe w chmurach oparte o PostgreSQL i zarówno AWS, Google jak i Azure obsługują włączanie rozszerzeń, w tym pg_trgm.

 

Tutaj masz pełną dokumentację: https://www.postgresql.org/docs/11/pgtrgm.html

Oczywiście nie będzie to wydajnościowo tak dobre jak dedykowane rozwiązania pokroju Elasticsearch, ale do Twoich potrzeb w zupełności wystarczy i przy tym znacznie prostsze we wdrożeniu i użyciu.

 

Ostatecznie jeszcze masz out of the box kilka niezależnych funkcji do określonego porównywania, ale bez odpowiedniego indeksowania (jak to ma miejsce w pg_trgm) wydajność nie będzie dobra: https://www.postgresql.org/docs/11/fuzzystrmatch.html

Odnośnik do komentarza
Udostępnij na innych stronach

1. AWS, Google jak i Azure rozumiem, że działa tak jak każdy hositng WWW, że po prostu kupuję i działa? Czy trzeba coś instalować samemu?

2. Jak to wygląda cenowo, bo na żadnej ze stron nie potrafię odnaleźć żadnego cennika. Są jak dla mnie strasznie chaotyczne.

3. Są jakieś takie standardowe hosting w nie wielkiej cenie które to obsłużą? To ma być bardzo mała apka i nie nastawiona na monetyzacje dlatego nie bardzo mi się uśmiecha płacić 3 cyfrowe kwoty miesięcznie.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

AWS, Google i Azure mają płatność od użyć, dlatego nie ma cennika. Im więcej korzystasz, tym więcej płacisz.

 

Postgresa ma sporo hostingów, pytanie, czy z tym rozszerzeniem.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...