Symfony jaki bundle do wyszukiwarki na stronie

0

Witajcie, pytanie jak w temacie, jutro będę tworzył jakąś prostą wyszukiwarkę na stronie przeszukująca jedynie lokalne zasoby typu statyczne strony, wpisy na blogu, aktualności... przeszukiwane będą teksty.

Czy możecie polecić jakiś gotowy bundle do stworzenia takiej wyszukiwarki?

Z góry dziękuję za pochyleniem się nad tematem ;)

0

Kiedyś używałem tego:

https://github.com/FriendsOfSymfony/FOSElasticaBundle

Nie mniej jednak pod spodem ma elastic searcha, więc wypadałoby zrozumieć co to jest i jak działa i jakie konsekwencje niesie za sobą jego użycie :P

0
Nie mniej jednak pod spodem ma elastic searcha, więc wypadałoby zrozumieć co to jest i jak działa i jakie konsekwencje niesie za sobą jego użycie :P

A dałbyś radę opisać w dwóch zdaniach?

1

Elastic search to zewnętrzna usługa odpalona na osobnym porcie. W uproszczeniu można napisać, że to osobny magazyn danych zoptymalizowany pod wyszukiwanie. Tworzysz indeksy do których dodajesz dane na potrzeby wyszukiwania. Trzeba zapewnić jakąś synchronizacje tych danych. Język zapytań o dane to nie SQL. Oczywiście sam bundle zapewnia sporą abstrakcje nie mniej warto poczytać dokumentacje elasticsearch żeby uzupełnić wiedzę i wiedzieć jak to poprawnie stosować.

0

Elastic search tudzież inne rozbudowane bundle dla prostych wyszukiwarek i małych stron to strzał w stopę. W firmie mieliśmy CMS dla prostych stronek i prawie zawsze przy przenosinach na inny hosting były problemy (niespełnione zależności, wymagania, zablokowane porty, a nawet brak dostępu do java). Stąd jeśli faktycznie ma to być coś prostego polecam zrobić sql'ową wyszukiwarkę za pomocą union selecta którego doctrine nie obsługuję. Oto prosty kontroler wyszukiwarki z podliczaniem ilości wystąpień słowa kluczowego i sortowaniem podług tego parametru:

public function indexAction(Request $request)
{

    $keyword = strtolower($request->query->get('keyword'));

    $sql = "select 'sites' as table_name, id, title, content from sites where (title like '%$keyword%' or content like '%$keyword%')
    union select 'blog' as table_name, id, title, content from blog where (title like '%$keyword%' or content like '%$keyword%')
    union select 'gallery' as table_name, id, title, content from gallery where (title like '%$keyword%' or content like '%$keyword%')
    union select 'movies' as table_name, id, title, content from movies where (title like '%$keyword%' or content like '%$keyword%')
    union select 'news' as table_name, id, title, content from news where (title like '%$keyword%' or content like '%$keyword%')";

    $stmt = $this->getDoctrine()->getManager()->getConnection()->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();

    for($i = 0; $i < count($result); $i++){
        $result[$i]['count'] = substr_count(strtolower($result[$i]['title']), $keyword) + substr_count(strtolower($result[$i]['content']), $keyword);
    }

    usort($result, function ($a, $b) {
        return strnatcmp($b['count'], $a['count']);
    });

    return array(
        'result' => $result
    );

}

Ten kod nie spełnia oczywiście Symfonowych założeń i sql nie jest w repozytorium ale działa ;)

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