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.
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? |
|
|
|
![]() |
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) 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 |
|
|
|
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) 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. |
|
|
|
chmolu wyszukiwarka 4.12.2005, 00:48:17
dtb http://www.phpsolmag.org/pl/modules/news2/....php?... 4.12.2005, 10:18:37
chmolu Z tego, co pamiętam to rozszerzenie BitSet nie jes... 4.12.2005, 10:36:23
bela_666 http://lucene.apache.org/ - Javove ale zawsze możn... 4.12.2005, 10:42:11 
kosmowariat Cytat(bela_666 @ 4.12.2005, 10:42:11 ... 27.02.2009, 10:44:04
SongoQ Wyszukiwanie zalezy od rodzaju bazy, niektore wspo... 4.12.2005, 12:58:23
chmolu Niestety muszę wrócić do tej sprawy.
Przez głupi ... 15.01.2006, 11:50:36
bela_666 Tsearch2? 15.01.2006, 15:09:04
Bora Cytat(chmolu @ 2005-12-04 00:48:17)Do tego je... 15.01.2006, 16:37:31
ActivePlayer a jak wyliczyc trafność ? 15.01.2006, 19:39:19 
Martio Cytat(ActivePlayer @ 15.01.2006, 20:39... 3.05.2007, 08:30:46
chmolu A jak ma się sprawa z LIKE %cośtam%?
Czy jeśli ma... 15.01.2006, 20:16:25
SongoQ LIKE jest zabojczy dla baz 15.01.2006, 22:31:51
ergo ja chyba czegos nie rozumiem , bo o ile mi sie wyd... 3.03.2006, 13:53:54
pawkow Według was należy ograniczać u... 19.03.2007, 16:24:40
Sedziwoj pawkow to rozwiązanie jest kiepskie, ponieważ przy... 26.03.2007, 23:24:19 
SHiP Cytat(Sedziwoj @ 26.03.2007, 22:24:19... 8.05.2007, 19:09:19 
Mikz Cytat(Sedziwoj @ 27.03.2007, 00:24:19... 25.06.2010, 17:03:41 
Sedziwoj Cytat(Mikz @ 25.06.2010, 18:03:41 ) S... 16.06.2011, 09:18:49
Turgon W mojej opinii otagowywać i na ich podstawie szuka... 27.03.2007, 17:32:19 
jupeter Ja znalazłem dobre rozwiązanie na indekser podgląd... 24.06.2007, 23:43:35
Riklaunim jest też Xapian - http://www.xapian.org/ który ma ... 5.05.2007, 19:32:41
AcidBurnt fajny przykład na PostgreSQL:
http://www.depesz.... 25.06.2007, 17:52:10
rubinek Sphinx -> http://www.sphinxsearch.com/ -> i ... 27.05.2008, 13:33:38
Strzałek Jednak nie każdy ma możliwość ... 11.10.2008, 15:25:16
c3zi Tak, ktoś używa. Jest bardzo wydajny jeśli chodzi ... 8.11.2008, 12:39:52
NuLL A czy Sphinx potrafi indeksowac kilka tabel z dany... 27.01.2009, 15:54:10 
Strzałek Cytat(NuLL @ 27.01.2009, 15:54:10 ) A... 5.03.2009, 17:54:28
rashid Sphinx indeksuje dane z dowolnego zapytania, wiec ... 31.01.2009, 12:33:57
ropsiU A próbował się ktoś z polską morfologią w sphinxie... 27.11.2009, 11:16:33
pawel_ Ja używam czegoś takiego ( w sekcji index )
Kodcha... 4.12.2009, 11:19:22
mr__y Cytat(ropsiU @ 27.11.2009, 12:16:33 )... 27.02.2010, 15:02:16
pawel_ Skrypcik:
Kod<?php
# ten plik ściągamy z htt... 1.03.2010, 12:02:27
Wave Na czym polega wyszukiwanie z użyciem indeksu słów... 29.06.2010, 12:15:30
ulow Indekser zapisuje w bazie/pamięci/gdzie chcesz poj... 29.06.2010, 13:57:41 
Wave Cytat(ulow @ 29.06.2010, 14:57:41 ) C... 30.06.2010, 23:13:52
ulow chodziło o "na podstawie jednego do dwóch słó... 3.07.2010, 09:22:33
gothye podobne rozwiązanie wykorzystane jest w silniku fo... 17.01.2011, 12:12:29
mankowski Witam,
A ma ktos moze jakis tutorial do sphinxa, n... 27.06.2011, 12:10:28
Ormin Taka jeszcze krotka piłka - Sphinx czy Lucene i dl... 28.06.2011, 14:17:06
Hellz http://webhosting.pl/Sphinx.zbuduj.wlasna.wyszukiw... 29.06.2011, 18:21:58
darko Polecam Apache Solr oparty o Lucene. Łatwe, szybki... 30.06.2011, 18:20:16
mrWodoo Ja zadam inne (banalne) pytanie.
Na czym polega wy... 31.03.2012, 14:51:13
marcio Czy nie chodzi ci o cos takiego: http://www.beldzi... 31.03.2012, 20:03:13
mrWodoo Nie, nie chodziło mi o podpowiedzi, tylko jak się ... 31.03.2012, 20:25:28
marcio Cytat(mrWodoo @ 31.03.2012, 21:25:28 ... 31.03.2012, 21:59:48 ![]() ![]() |
|
Aktualny czas: 4.12.2025 - 17:46 |