Witam,
W portalu społecznościowym mam kilka podstron/miejsc, w których będą wyszukiwarki np. użytkowników, grup, obiektów i ogłoszeń. Przyszedł czas by zabrać się za zaprogramowanie ich, no i mam dylemat oraz pytania odnośnie strony technicznej wyszukiwania.
Najpierw napaliłem się na ElasticSearch, nawet dziś postawiłem go sobie lokalnie, ale zacząłem się zastanawiać czy do moich potrzeb nie wystarczy funkcja LIKE albo MATCH AGAINST (wyszukiwanie pełnotekstowe)** [moja baza to MariaDB, backend w PHP]**. ElasticSearch pewnie jest super, ale pomijając te wszystkie korzyści czyniące wyszukiwarkę - inteligentną, to do tego dochodzi później dodatkowy serwer dla ElasticSearch.

Moje założenia i informacje odnośnie danych w bazie:

  • użytkownicy: (szukanie po imieniu i nazwisku) około 20.000 użytkowników + dodatkowe join'y do tabel z informacjami o użytkowniku (np. liczba znajomych, ilość zdjęć, lista zainteresowań)
  • grupy: (szukanie po nazwie grupy) około 500 grup + dodatkowy join z informacją o nazwie przypisanej kategorii
  • ogłoszenia (szukanie po tytule ogłoszenia - częściej będą raczej nazwy dłuższe do 100 znaków) około 2.000 ogłoszeń + join'y: z nazwą kategorii, z nazwą lokalizacji, z parametrami ogłoszenia
  • obiekty (szukanie po tytule obiektu) - 15.000 obiektów (stała lista - nic tu nie będzie dodawane/zmieniane) + dodatkowy join z przypisanymi kategoriami (może być ich kilka).

Dodatkowo w głównej wyszukiwarce (w headerze strony) będę chciał wyświetlić wyniki wyszukiwania z tych 4 "sekcji", więc ilość rekordów wzrasta :)
Może to pomoże w analizie mojego obecnego zapotrzebowania.

No i moje pytania do osób już doświadczonych w temacie wyszukiwarek:

  1. Lepiej użyć tutaj funkcji LIKE, wyszukiwania pełnotekstowe (MATCH AGAINST) czy ElasticSearch na osobnym serwerze? Jak to w portalu społecznościowym, będzie dużo select'ów i insert'ów do bazy (MariaDB), więc baza i tak będzie miała co robić przez cały czas, dlatego nie jestem pewien czy LIKE lub MATCH AGAINST tutaj przejdzie. Wiem, że LIKE jest masakryczny, ale podobno przy niedużej ilości rekordów da się z nim żyć, dlatego podałem wyżej moje założenia co do ilości rekordów bo nie wiem jaka ilość jest bezpieczna przy współpracy z LIKE, a być może ktoś ma doświadczenia już z tym i mnie uświadomi :)

  2. Jeżeli jednak ElasticSearch:
    2.1. To jak najlepiej (optymalnie) łączyć się z nim podczas wyszukiwania przez użytkownika? Z PHP przez CURL-a łączyć się za każdym razem z ElasticSearch-em czy jakoś inaczej? I wtedy pobierać wszystkie potrzebne dane - łącznie z kategoriami (jeśli są potrzebne) czy tylko wyciągać dane jednej "tabeli" (np. uzytkowników) a po otrzymaniu response od ElasticSearch, łączyć się jeszcze z bazą i dla otrzymanych ID pobierać dodatkowo potrzebne zainteresowania użytkownika?
    2.2. Jak najlepiej (optymalnie) dokładać nowe dane z bazy danych do ElasticSearch? CRON-em czy za każdym razem gdy jest jakiś update/insert to od razu wtedy także wysyłać request do ElasticSearch?

Jeżeli ktoś ma jakieś doświadczenie odnośnie tego o co zapytałem, to nawet jakieś cyferki byłoby fajnie gdyby ktoś przytoczył :)

Z góry dziękuję za pomoc :D