Dynamiczna wyszukiwarka tekstowa

Odpowiedz Nowy wątek
2018-11-05 18:23
0

Witam, chciałbym poradzić się Was odnośnie wyszukiwarki takiej jak ma Facebook (ta na górze strony). Wyszukiwanie miałoby być "różnych typów obiektów" np. użytkownicy, grupy, fanpejdże, wydarzenia - wyszukiwanie tylko po jednym polu - tytuł. Wszystkie te obiekty są w osobnych tabelach (moja główna baza to MySQL). Chciałbym to zrobić możliwie optymalnie, ale nie wiem, którą drogę wybrać.
Wydaje mi się, że można to zrobić takimi sposobami:

  1. Cron-em co jakiś czas przenosić te wszystkie dane (uzytkownicy, grupy, fanpejdze, wydarzenia) do Elastic Search do jednej "tabeli" i przy wyszukiwaniu używać właśnie tylko danych z ES?
  2. Odpalić jakiś serwer z kolejkowaniem (np. Redis), przyjmować tam na bieżąco nowe dane i cron-em lub node.js odbierać i pakować do Elastic Search?
  3. Czy może przy tworzeniu tych obiektów przez użytkownika na portalu, od razu zapisywać dane do dwóch baz danych: główna - MySQL i dodatkowa dla potrzeb wyszukiwania: Elastic Search albo Mongo?

Może są jakieś całkowicie inne metody do tego? Będę wdzięczny za wskazówki.

edytowany 1x, ostatnio: adriano1995, 2018-11-05 18:24

Pozostało 580 znaków

2018-11-05 19:51
1

A jesteś pewien, że potrzebujesz ES? Ile będziesz miał rekordów? 1k? 1M? MySQL wspiera FTS OOtB więc możesz to zwyczajnie zrobić wewnątrz DB poprzez zwykły widok. Dla prostych wyszukiwań powinno być zdecydowanie prostsze.

a da radę zrobić ciut lepsze to wyszukiwanie w MySQL? Właściwie to używam bazy MariaDB 10 a nie MySQL. Ciut lepsze - mam na myśli ignorowanie polskich znaków i chociaż jedno przesunięcie znaku aby tolerowało (fuzziness). Szukałem w necie, ale raczej są tylko własne/customowe implementacje tego fuzziness, a natywnego w MySQL to tylko znalazłem funkcję SOUNDEX, która słabo działa z tego co sprawdzałem. - adriano1995 2018-11-09 12:03

Pozostało 580 znaków

2018-11-05 21:05
0

Używam już ES w jednym miejscu do wyszukiwania ogłoszeń więc nie będzie problemu z dołożeniem bo ES i tak jest. Nie chcę i tak tego robić wyszukiwania na głównej bazie bo będzie ona cały czas i tak wystarczająco zajęta obsługiwaniem innych zadań. Chyba, że postawić serwer z drugą bazą (slave, tryb read-only), żeby replikować do niej te tabele używane do wyszukiwania i w tej osobnej bazie wyszukiwać?
Co do ilości rekordów, zakładając że będę miał te 4 różne typy obiektów czyli użytkownicy, grupy, fajnpejdże, wydarzenia, to zakładam do pewnego momentu 100 tyś. rekordów łącznie. Jeśli da się tak fajnie ogarnąć to wyszukiwanie w MySQL (czyli ignorowanie literówek, polskich znaków) to pasowałoby mi takie rozwiązanie na początek :)

Pozostało 580 znaków

2018-11-08 14:51
0

Proponuje Apache SOLR coś jak FTS na sterydach.

Pozostało 580 znaków

2018-11-08 23:16
0

@bfraszczyk: w takiej mini wyszukiwarce akurat sterydów nie potrzebuje, więc chyba obejdzie się, a i tak pozostaje kwestia jak te dane mógłbym dostarczać do SOLR-a z głównej bazy :D

edytowany 1x, ostatnio: adriano1995, 2018-11-08 23:17

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0