wyszukiwarka, wydajna, z prawdziwego zdarzenia ;) |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
wyszukiwarka, wydajna, z prawdziwego zdarzenia ;) |
4.12.2005, 00:48:17
Post
#1
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Witam,
wiem, że takie tematy już były, ale nie znalazłem w nich żadnych konkretów. Jak podeszlibyście do problemu zbudowania mechanizmu wyszukiwarki dla systemu, który nierzadko może obsługiwać spore ilości danych (w wielu tabelach)? Interesuje mnie wszystko na ten temat - linki, artykuły, tutoriale. Spotkałem się już w kilku aplikacjach z rozwiązaniem, które wyglądało mniej więcej tak: treść tabeli, np. articles jest dzielona na słowa, np tekst: Cytat To jest przykładowa treść artykułu Zostanie podzielony na tablicę:
Słowo "to" jest traktowane jako tzw. common word i pomijane. Te słowa są wrzucane do osobnej tabeli, która ma mniej wiecej taką strukturę: Kod word_id word_text Do tego jest jeszcze jedna tabela, która łączy artykuł ze słowami: Kod article_id word_id Rozwiązanie ciekawe, ale zastanawia mnie, jak to jest z jego wydajnością. O ile liczba słów jest ograniczona, to druga tabela może się nieźle rozrosnąć. Pisał już ktoś coś takiego? Jakie są wasze sposoby na problem wyszukiwarki w CMSach? |
|
|
1.03.2010, 12:02:27
Post
#2
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 12.12.2005 Ostrzeżenie: (0%) |
Skrypcik:
Kod <?php # ten plik ściągamy z http://www.sjp.pl/slownik/odmiany/ echo "Pobieranie słownika odmian\n"; passthru("wget http://sjp.pl/slownik/odmiany/sjp-odm-20090114.tar.gz -O sjp-odm-20090114.tar.gz"); passthru("rm -rf odm.txt"); passthru("tar zxf sjp-odm-20090114.tar.gz"); $uchwyt = fopen("odm.txt", "r"); $zapis = fopen("odmiany.sphinx", "w+"); // odmiany echo "Jedna kropka to 1000 słów\n"; echo "Tworzenie słownika odmian\n"; $i = 0; while (!feof($uchwyt)) { $linia = explode(", ", fgets($uchwyt)); $pierwszy = trim(array_shift($linia)); if (!empty($pierwszy)) { fwrite($zapis, $pierwszy.' > '.implode(' ', $linia)); } if ((++$i%1000) == 0) { echo "."; } } fclose($uchwyt); fclose($zapis); # ten natomiast z http://synonimy.ux.pl/ echo "Pobieranie słownika synonimów\n"; passthru("wget http://switch.dl.sourceforge.net/sourceforge/synonimy/thesaurus-1.5.txt.gz -O thesaurus-1.5.txt.gz"); passthru("gunzip thesaurus-1.5.txt.gz"); // tezaurus echo "\nJedna kropka to 100 słów"; echo "\nTworzenie słownika synonimów\n"; $uchwyt = fopen("thesaurus-1.5.txt", "r"); $i = 0; while (!feof($uchwyt)) { $linia = explode(";", fgets($uchwyt)); $pierwszy = trim(array_shift($linia)); if (!empty($pierwszy)) { fwrite($zapis,$pierwszy.' > '.$pierwszy."\n"); if (!empty($linia)) { foreach ($linia as $wyraz) { if (false === strpos($wyraz, ' ')) { fwrite($zapis,trim($wyraz).' > '.$pierwszy."\n"); } } } } if ((++$i%1000) == 0) { echo "."; } } Było aktualne w wakacje, mogły się linki pozmieniać. Odpalasz i masz odpowiedni plik z odmianami i bliskoznacznymi. W indexie dodajesz wordforms = /<sciezka>/odmiany.sphinx Ten post edytował pawel_ 1.03.2010, 12:05:48 |
|
|
Wersja Lo-Fi | Aktualny czas: 25.09.2024 - 14:15 |