MaxGaming Opublikowano 14 Stycznia 2019 Udostępnij Opublikowano 14 Stycznia 2019 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Stycznia 2019 Administratorzy Udostępnij Opublikowano 14 Stycznia 2019 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 Więcej opcji udostępniania...
MaxGaming Opublikowano 14 Stycznia 2019 Autor Udostępnij Opublikowano 14 Stycznia 2019 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 14 Stycznia 2019 Administratorzy Udostępnij Opublikowano 14 Stycznia 2019 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 Więcej opcji udostępniania...
MaxGaming Opublikowano 14 Stycznia 2019 Autor Udostępnij Opublikowano 14 Stycznia 2019 2. No myślałem oczywiście o takim uproszczonym algorytmie. To nie ma być duża apka. 3. Masz na myśli na VPSie? Po prostu nigdy nie kupowałem VPS, bo bałem się, że źle skonfiguruję, albo zabezpieczę i będzie lipa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Stycznia 2019 Administratorzy Udostępnij Opublikowano 15 Stycznia 2019 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 Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 15 Stycznia 2019 Filar Społeczności Udostępnij Opublikowano 15 Stycznia 2019 @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 Więcej opcji udostępniania...
MaxGaming Opublikowano 16 Stycznia 2019 Autor Udostępnij Opublikowano 16 Stycznia 2019 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 16 Stycznia 2019 Administratorzy Udostępnij Opublikowano 16 Stycznia 2019 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę