Najnowsze wpisy

Zaawansowana subskrypcja, nasze nowe rozszerzenie

W repozytorium CMS TYPO3 jest już kilka pluginów za pomocą których można...
09 styczeń 2012

Convenient In/Out animation using expressions

We recently had an opportunity to make a set of instructional animations...
07 listopad 2011

Wdrożenie Sphinx Search

W ostatnim czasie potrzebowaliśmy wydajnego i rozbudowanego mechanizmu...
26 lipiec 2011

Tagi

Wyszukiwarka indeksująca mnogosearch w mm_forum

Jakiś czas temu Google wykonał eksperyment zwiększając ilość wyników na stronie wyszukiwania z 10 do 30. Czas ładowania 30 wyników zwiększył się z 0.4s do 0.9s, a ruch wśród szukających informacji spadł o 20%. Pokazuje to jak ważną częścią naszej witryny jest wyszukiwarka i szybkość jej działania.

Nie chciałbym, aby cały nasz blog był poświęcony tylko i wyłącznie problemom wydajności. Jednak tak to bywa, że podczas codziennej pracy nad dużymi serwisami nie można nawet na chwile zapominać o kwestii wydajności a szczególnie wtedy, kiedy równocześnie chcemy ograniczyć koszty związane z późniejszym wzrostem ruchu.

Wbudowana w TYPO3 wyszukiwarka indeksująca indexed_search pozostawia wiele do życzenia i nie polecam jej użycia w obszernych serwisach z dużą ilością informacji. Zdecydowanie lepszym rozwiązaniem, choć na pewno wymagającym więcej konfiguracji jest wtyczka mnogosearch. Rozszerzenie to pozwala nam na podłączenie zewnętrznego silnika indeksującego o takiej samej nazwie i wykorzystanie jego ogromnych możliwości w połączeniu z TYPO3.

Opis dokładnej konfiguracji znajduje się na stronie z rozszerzeniami TYPO3, natomiast ja skupię się na paru dodatkowych trikach, które pozwolą na indeksowanie bazy sql.

Na pewno padnie pytanie dlaczego chcę indeksować bazę danych, a nie widok strony. Oczywiście wszystko zależy od tego, co chcemy osiągnąć. Mało ciekawie wygląda szukanie w wynikach forum dyskusyjnego kiedy nie możemy wyświetlić np. autora posta, czy autora zdjęcia w bazie zdjęć. Mnogosearch indeksując bazę sql zwraca nam  uid zindeksowanego rekordu, który później bardzo łatwo możemy połączyć  z autorem czy np. tematami pokrewnymi.

Poniżej pokażę jak możemy zindeksować całą zawartość mm_forum za pomocą wtyczki mnogosearch i bardzo nie wielu zmian.

Na początek musimy mieć możliwość pobrania wszystkich niezbędnych danych z użyciem  jednego zapytania sql. Wtyczka mnogosearch nie daje nam takiej możliwości, więc musimy znaleźć obejście tego problemu, najlepiej bez znacznej ingerencji w kod. Z pomocą przychodzi nam możliwość zdefiniowania widoków w bazie mysql  (tzw wirtualnej tabeli).

Silnik wyszukiwarki powinien indeksować dane z  3 poniższych tabel:

  • tx_mmforum_posts
  • tx_mmforum_posts_text
  • tx_mmforum_topics

a kolejne zapytanie sql połączy nam wszystko w jeden widok (wirtualną tabelę)

zaznacz
  1.  
  2. sql CREATE VIEW `tx_mmforum_mnogoview` AS SELECT tx_mmforum_topics.topic_title AS topic_title,tx_mmforum_topics.uid AS uid, tx_mmforum_posts_text.post_text AS post_text FROM tx_mmforum_posts INNER JOIN tx_mmforum_posts_text ON (tx_mmforum_posts_text.post_id = tx_mmforum_posts.uid AND tx_mmforum_posts.hidden = 0 AND tx_mmforum_posts.deleted = 0 AND tx_mmforum_posts_text.hidden = 0 AND tx_mmforum_posts_text.deleted = 0 ) INNER JOIN tx_mmforum_topics ON (tx_mmforum_posts.topic_id = tx_mmforum_topics.uid AND tx_mmforum_topics.hidden=0 AND tx_mmforum_topics.deleted = 0)

Powstała nowa tabele zwana widokiem o nazwie tx_mmforum_mnogoview, której zawartość możemy podejrzeć w phpmyadminie.

Czas na zindeksowania naszej nowej tabeli. Na szczęście nie musimy powyższego widoku widzieć w TYPO3, ponieważ samo TYPO3 w żaden sposób się do niej nie odwołuje. Jedynie indexer podczas indeksowania będzie czytał jej zawartość. Indexer w mnogosearch wywoływany jest z cron'a i ustanawia własne połączenie z bazą danych.

W kolejnym kroku musimy dodać odpowiednią konfiguracje do tabeli tx_mnogosearch_indexconfig. Na etapie pisania tego artykułu, niestety, nie mamy możliwości zrobienia tego inaczej niż za pomocą phpmyadmina, ale intensywnie szukamy czasu, aby to zmienić i zautomatyzować :)

Konfiguracja, którą należy dodać wygląda następująco:

value

description

tx_mnogosearch_type

11

represents records

tx_mnogosearch_table

tx_mmforum_mnogoview

virtual table

tx_mnogosearch_title_field

topic_title

tx_mnogosearch_body_field

topic_title,post_text

tx_mnogosearch_url_parameters

&tx_mmforum_pi1[action]=list_post&tx_mmforum_pi1[tid]={field:uid}

tx_mnogosearch_display_pid

20

Teraz czas na przeindeksowanie mnogosearch za pomocą komendy:

zaznacz
  1.  
  2. /path/to/php/php5 -q /path/to/web/site/typo3/cli_dispatch.phpsh mnogosearch -w -n

Brak komentarzy.
Dodaj swój komentarz:

* Tylko oznaczone pola są wymagane