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ę)
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:
/path/to/php/php5 -q /path/to/web/site/typo3/cli_dispatch.phpsh mnogosearch -w -n

Ostatnie komentarze
Daniel
I get a fatal error with this extension: Fatal error: Call to undefined method t3lib_div::makeInsta... / 07 maj. 20:53
Zaawansowana subskrypcja, nasze nowe rozszerzenie
Michael
The correct Amazon S3 API TER link is http://typo3.org/extensions/repository/view/amazon-s3-api T... / 24 kwi. 11:44
s3example - TYPO3 i Amazon S3
Adi
Pod nową wersją t3 z gałęzi 4.5.14 (gdzie w korze znalazły się jakieś krytyczne luki) wtyczka też ni... / 02 kwi. 19:52
Zaawansowana subskrypcja, nasze nowe rozszerzenie
Rafał Brzeski
Nasze niedopatrzenie, w nowej wersji dodamy opcję wyboru tej opcji. / 21 mar. 20:22
Zaawansowana subskrypcja, nasze nowe rozszerzenie
bocianos
Wszystko super tylko jak zrobic aby nowe adresy domyslnie miały zaznaczone otrzymywani maili w forma... / 20 mar. 13:08
Zaawansowana subskrypcja, nasze nowe rozszerzenie