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? |
|
|
5.05.2007, 13:55:38
Post
#2
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 30 Dołączył: 5.05.2007 Skąd: Mannheim Ostrzeżenie: (0%) |
Mysle , ze temat wyszukiwarek jest zbyt wielki zeby wszystkie watpliwosci rozwiac podczas dyskusji na forum.
Pracuje kilka lat w niemieckiej firmie specjalizujacej sie w aplikacjach webowych i moge jedynie napisac kilka slow o naszym sposobie. Przede wszystkim na podstawie danych ktore moga byc wyszukiwane przez uzytkownikow generujemy specjany text index , ktory pozwala na natychmiastowe (prawie) znalezienie danych. Text index to tylko nazwa tak naprawde dane dla wyszukiwarki moga byc trzymane w tabeli w bazie. Najwazniejsza jednak rzecz to budowa indexu w taki sposob aby mozna bylo uzyc algorytmu DFA do jego przeszukiwania. Jest to standartowy algorytm uzywany przez MYSQL do tworzenia text indexow przy FULLTEXT , ale w naszym przypadku FULLTEXT MYSQL tworzy zbyt ogolny text index, dlatego tworzymy sobie wlasny absolutnie indywidualny dla naszych danych. Nastepnym krokiem jest wlasnie owa wyszukiwarka ktora zgodnie z DFA przeszuka caly text index i zwroci nam resultat , counter i tym podobne rzeczy. Text index jest odswiezany raz dziennie , czyli tak na prawde dane wprowadzone dzisiaj moga byc widoczne, dopiero nastepnego dnia. W naszym przypadku potrzebne sa trzy aplikacje 1. tworzaca indexy (Java lub C++) 2. nasluchujaca (Java lub C++) 3. przeszkujaca indexy wg DFA (Java lub C++) no i oczywiscie cos co to wszystko wyswietli (PHP) Do komunikacji PHP z Java uzywamy JavaBridge ,z C++ Ajaxa z responseXML Na podobnej zasadzie (ale na 100% o wiele lepiej pracujacej) bazuja Google, mam na mysli algorytm DFA A tak na marginesie nalezy dodac ze Google rowniez uzywaja MYSQL-a , co powinno zakonczyc dyskusje na temat waznosci swiat Bozego Narodzenia na Wielka Noca Powinienem dodac , ze text index w naszym przypadku trzymany jest w pamieci aplikacji nasluchujacej ,ale jest to indywidualny wybor, dane mozna trzymac w tabelach chociaz chodzi to nieco wolniej. Nasza wyszukiwarka przeszkuje baze danych 2 milionow firm polaczonych z kategoriami , oraz 40 milionach danych adresowych . Musze przyznac ze textindexy osigaja kilkugigowe rozmiary ale algorytm pozwala absolutnie szybko eliminowac niepotrzebne kroki podczas wyszukiwania. Na zakonczenie chcialbym dodac , ze nie widze absolutnie zadnego prolemu w napisaniu calego mechanizmu w PHP Wyszukiwarka ta pracuje na stronie http://city24.de/YellowPages Wiecej szczegolow podac niestety nie moge ale zachecam do zapoznania sie z DFA i mam nadzieje ze pomysly z jego wykorzystanim nasuna sie Wam same Pozdrawiam -------------------- Flash Flex PHP JAVA RED5 http://www.easyweb24.net
|
|
|
10.05.2007, 10:11:48
Post
#3
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 22.11.2003 Ostrzeżenie: (0%) |
W naszym przypadku potrzebne sa trzy aplikacje 1. tworzaca indexy (Java lub C++) 2. nasluchujaca (Java lub C++) 3. przeszkujaca indexy wg DFA (Java lub C++) no i oczywiscie cos co to wszystko wyswietli (PHP) Do komunikacji PHP z Java uzywamy JavaBridge ,z C++ Ajaxa z responseXML No bez perwy... Google daje rade indeksowac skryptami w Pythonie, wiec nie widze najmniejszego problemu z zaprzegnieciem PHP do tej samej funkcji, szczegolnie do indeksowania danych stanowiacych jakis pikoprocent danych, na ktorych operuje Google. Na podobnej zasadzie (ale na 100% o wiele lepiej pracujacej) bazuja Google, mam na mysli algorytm DFA A tak na marginesie nalezy dodac ze Google rowniez uzywaja MYSQL-a , co powinno zakonczyc dyskusje na temat waznosci swiat Bozego Narodzenia na Wielka Noca MySQL nie jest uzywany do przechowywania indeksu Google. Jest uzywany w innych aplikacjach, np. do gromadzenia statystyk Google Analytics (strzelam tutaj bazujac na tym, ze Urchin stanowiacy baze dla GA korzystal z tego). Odpowiadajac na glowne pytanie tego watku, jesli ktos chce pisac samodzielnie wydajna wyszukiwarke, to polecam http://labs.google.com/papers.html (tutaj miedzy innymi artykuly o sposobie przechowywania danych glownego indeksu Google). Dla wiekszosci powaznych rozwiazan lepsze na dluzsza mete bedzie skorzystanie z gotowca, czyli http://www.google.com/enterprise/mini/. PS. Nie mam ochoty na dyskusje o nieosiagalnosci Mini z powodow finansowych. -------------------- Robert Janeczek
G-Forces Web Management Polska robert.janeczek@gforces.pl |
|
|
24.06.2007, 23:43:35
Post
#4
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 1 Dołączył: 14.07.2004 Skąd: Warszawa Ostrzeżenie: (0%) |
Ja znalazłem dobre rozwiązanie na indekser podglądając kod MediaWiki. Wykorzystuje ona full-text różnych baz danych (na pewno był tam: MySQL, PostgreSQL i Oracle).
Patrząc na wykorzystanie tych skryptów na dużą skalę (Wikipedia - duże obciążenie + duża ilość zapytań w wyszukiwarkę) to wg mnie zachowuje się wzorowo. U mnie sprawdza się przy ok. 80 tyś. zasobów. Wyszukuje w 95% poniżej 0,05 sekundy. No bez perwy... Google daje rade indeksowac skryptami w Pythonie, wiec nie widze najmniejszego problemu z zaprzegnieciem PHP do tej samej funkcji, szczegolnie do indeksowania danych stanowiacych jakis pikoprocent danych, na ktorych operuje Google. Hehe. Wszystko kwestia ilości zasobów i wielkości serwera/serwerów. Jak masz mało zasobów dziennie i mało obciążony serwer/y, to możesz i na PHP . Przy dużej skali, to nie wiem czy byłbyś tak zadowolony z indeksera w samym PHP, gdyby nie wyrabiał dziennego zbioru do zaindeksowania + non stop CPU na 100% . -------------------- www.symfony.pl - serwis społeczności symfony
|
|
|
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 07:23 |