Budowanie wyszukiwarki - po raz kolejny

Budowanie wyszukiwarki - po raz kolejny
Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Watpliwosci co do systemu wyszukiwania nie opuszczaja mnie od kiedy zaczalem prace nad nowa wersja Coyote :P Wlasciwie juz jakis czas temu napisalem modul umozliwiajacy korzystanie z mechanizmu silnika Solr. Dziala b. dobrze, lecz nadal mam watpliwosci co do metody "zbierania" danych, czyli indeksowania tresci serwisu :/ Napisze tutaj moze watpliwosci - moze ktos podsunie jakas mysl, ktora moze okazac sie jakas wskazowka.

A wiec: kazda podstrona w nowym serwisie jest strona, czyli de facto - istnieje odpowiedni rekord w tabeli o nazwie page. Dzieki temu istnieje cale drzewo stron, ktorym latwo mozemy zarzadzac. Czyli tak:

Kopiuj
- Csharp
  - Wprowadzenie
  - Artykuly
...
- Forum
  - Newbie
    -Nowy temat w Newbie

Kazda strona posiada unikalne ID oraz sciezke dostepu. Czyli np. Csharp/Wprowadzenie/Rozdzial_1. Dzieki temu w latwy sposob mozna wyswietlic drzewo stron albo liste stron w pliku sitemap.xml. Do kazdej strony mozna rowniez ustalic uprawnienia dostepu czy inne opcje. Tabela page posiada rowniez pole page_module okreslajace ID modulu, do ktorego przypisana jest dana strona. Dzieki temu wiadomo, ze np. po wywolaniu URL-a: Forum/Newbie "wlaczony" ma zostac kontroler odpowiadajacy za wyswietlenie listy watkow w tej kategorii.

Teraz: jakie sa mozliwe sposoby indeksacji stron w serwisie?

Sposob nr 1). Napisalem to jakis czas temu. Instalujac modul wyszukiwania Solr, ow modul podczepia sie pod odpowiedni trigger (hook): application.onPageSubmit. Ktory to jest wywolywany w momencie, gdy strona jest zapisywana. Dzieki temu mamy URL strony, ktora potrzeba zindeksowac. Dodajemy URL do kolejki i uruchamiamy crawlera. Takie rozwiazanie napisalem i dziala. Lecz crawler jest prosta klasa w PHP, a jak wiadomo, PHP sie do tego nie nadaje. W zwiazku z tym myslalem o crawlerze napisanym w innym jezyku, jak np. Nutch, ktory jest napisany w Javie i podobno dobrze integruje sie z Solr (nie wiem, nie sprawdzalem).

Dzieki temu mielibysmy porzadnie zindeksowana strone i wyszukiwarke z prawdziwego zdarzenia. Minusem takiego rozwiazania moga byc duplikaty. Np. te same strony zindeksowane wiele razy (np. lista tematow posortowana inaczej). W moim crawlerze PHP utworzylem filtry i wyjatki. Dzieki temu pewne adresy URL moga byc omijane. Mam nadzieje, ze w crawlerze typu Nutch, tez jest taka opcja?

Sposob nr 2). Indeksacja tylko tresci, ktore maja wieksze znaczenie. W sposobie nr 1. crawler indeksuje cale strony. Ten sposob to indeksacja tylko tresci artykulow, czy tresci postow.

Przy wywolaniu triggera, zapisywany jest ID strony. Nastepnie na podstawie ID odczytywany jest modul oraz tzw. lacznik, czyli nazwa klasy ktora odpowiada za konfiguracje strony (niewazne na tym etapie ;)). Kazdy lacznik moze posiadac metody, ktore beda swego rodzaju wrapperem. Ow wrapper bedzie zwracal dane do indeksacji (np. w formie XML). I tak:

jezeli mamy do czynienia z modulem artykulow, tutaj sprawa jest prosta. Wrapper zwraca tresc artykulu, modul "solr" indeksuje ta tresc wraz z URL. Jezeli mamy do czynienia z tematem na forum, wrapper zwraca liste postow do indeksacji. Wada: do stron moga byc przylaczone wtyczki. Np. wtyczka komentarzy. Wowczas ciezko przy takim rozwiazaniu, indeksowac rowniez tresc komentarzy :/

Jak Wy byscie to zrobili?

Kopiuj
bordeux
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Chorzów
  • Postów: 1130
0

bede brutalny: po co to? Solr jest w javie. Jesli chodzi o system coyote- to juz nie bedzie go mozna hostowac na tanszych serwerach, nawet na localhoscie, jak ktos ma gotowy serwer wamp- chyba ze zainstaluje na nim servlety (na windowsie to masakra).
A jak juz szukam cos powaznego, to tylko w google- szukane slowo site:4programmers.net. Nie ufam wyszukiwarkom na stronach. Ja bym pozostal na przeszukiwaniu pelnotekstowym mysql.

Qyon
  • Rejestracja: dni
  • Ostatnio: dni
Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

@bordeux: poniewaz, niestety fulltext search jest niewystarczajaco wydajny :/ A dane na stronie podzielone sa na wiele tabel (artykuly, tematy na forum). No i wreszcie ostatni powodw: mySQL suxx poniewaz fulltext search dziala tylko na tabelach typu MyISAM (w przyszlosci mySQL zostanie zastapiony inna baza). Tak wiec mozna dopisac modul wyszukiwania przy pomocy fulltext ale nie mozna tego zastosowac na 4programmers.net

Usluga google na tego typu stronie wydaje mi sie malo profesionalne :/ A Solr to swietny, zaawansowany oraz wydajny engine. Ktory dziala podobnie jak google ;) Jedyny problem dla mnie to indeksacja stron.

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
0
Adam Boduch napisał(a)

Usluga google na tego typu stronie wydaje mi sie malo profesionalne :/
Zdecydowanie i w pełni się zgadzam

deus
  • Rejestracja: dni
  • Ostatnio: dni
0

...a jak oceniacie profesjonalizm obecnej wyszukiwarki?

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

@deus: my mowimy teraz o Solr, nie?? :/

deus
  • Rejestracja: dni
  • Ostatnio: dni
0

Owszem, po prostu chciałem zauważyć, że 'profesjonalizm' to rzecz względna. Najważniejsza jest jakość.

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Jakosc to tez rzecz wzgledna.
Solr zapewni wreszcie, dobre dzialanie systemu wyszukiwania.

Mam tylko watpliwosci co do indeksacji danych, o tym jest ten temat.

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Wyszukiwanie bedzie wygladac mniej wiecej tak: http://coyote.boduch.net/demo/Szukaj?q=lorem+ipsum

Musze jeszcze dorobic formularz wyszukiwania zaawansowanego, gdzie bedzie mozliwe uzywanie operatorow AND, OR, NOT, czy symboli () " ~
Bedzie mozna rowniez na potrzeby danego szukania okreslic priorytety danych slow - np.: path:lorem^2.0 AND text:lorem (wazniejsze jest znalezienie slowa lorem w sciezce do strony).

Aktualizacja indeksu powinna nastepowac w ok 10 min. po dodaniu/uaktualnieniu danej strony, czy postu.

deus
  • Rejestracja: dni
  • Ostatnio: dni
0

Wszystko cacy, tylko przy poście zamiast daty napisania jest data jego wyszukania...

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Eee, nie no - gdzie?

To jest data dodania do indeksu lub tez data aktualizacji w indeksie, czyli de facto - data aktualizacji strony.

deus
  • Rejestracja: dni
  • Ostatnio: dni
0

Tak, data wyszukania przez to ustrojstwo. Wątki mające po dwa miesiące są datowane na '[dzisiaj, 13:43]'. Oczywiście zostanie to poprawione przed zaimportowaniem i zaindeksowaniem obecnej bazy.

Tak BTW - będzie mechanizm translacji z obecnej formy linków na nową? Do 4p linkuje masa stron, do tego wszelakie indeksy, wyszukiwarki...

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
0

I koniecznie z nagłówkiem Redirect 301 Moved Permanently

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0
deus napisał(a)

Tak, data wyszukania przez to ustrojstwo. Wątki mające po dwa miesiące są datowane na '[dzisiaj, 13:43]'. Oczywiście zostanie to poprawione przed zaimportowaniem i zaindeksowaniem obecnej bazy.

Tak BTW - będzie mechanizm translacji z obecnej formy linków na nową? Do 4p linkuje masa stron, do tego wszelakie indeksy, wyszukiwarki...

Tak, bo dopiero dzisiaj zainstalowalem na serwerze Solr i zindeksowalem dane ;)

I tak - postaram sie, aby stare linki dzialaly prawidlowo.

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
1

Powracając do tematu naszej wyszukiwarki. Niestety, nadal brak jakości.
Często użytkownicy wpisują "buzzwordy" chcąc odnaleźć temat, którego treść słabo pamiętają. Spójrzmy:

https://www.google.pl/#hl=pl&output=search&q=dwa+drzewiaste+z+danymi+połączyć+concat+site:4programmers.net
http://4programmers.net/Szukaj?q=dwa+drzewiaste+z+danymi+po%C5%82%C4%85czy%C4%87+concat

Google: parę wyników, najwyższy wynik jest okej.
Coyote: nic nie znaleziono.

http://bit.ly/wn4fkk
http://4programmers.net/Szukaj?q=rozwijana+lista+%3Cul%3E+z+kilkoma+pozycjami

Google: jeden wynik, trafny.
Coyote: nic nie znaleziono.

Takich przypadków jest więcej, szukajka nie radzi sobie po prostu z bardziej rozbudowanymi zapytaniami i odmianą końcówek...
Google Custom Search jest obecnie na tyle customizowalny, że można ustalić mu na jakich zasadach ma indeksować treść na stronie, czego ma nie indeksować, etc. No i oczywiście można go wystylować tak, żeby wyglądał jak integralny kawałek serwisu. Z technologią Googla chyba każdy jest mniej, czy bardziej zaznajomiony. Może lepiej zrezygnować z wątpliwej własnej wyszukiwarki na rzecz sprawdzonego rozwiązania innej, bardziej doświadczonej firmy? Custom Search w takim zastosowaniu nic nie kosztuje.

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Indeks wyszukiwarki nie byl aktualizowany od miesiaca :/ Wlasnie pracuje nad wyszukiwarka forumowa, troche pracy juz zostalo wykonane.

Solr jest swietnym silnikiem, trzeba go odpowiednio skonfigurowac. A troche tego jest. Np. rozne tryby wyszukiwan. Jezeli chodzi o Twoje zapytanie, to zwraca 11k stron w odpowiedzi na te slowa kluczowe: http://4programmers.net/Szukaj?q=dwa+drzewiaste+z+danymi+po%C5%82%C4%85czy%C4%87+concat&t=s&start=0 (po lewej stronie, w ustawieniach trybu wyszukania wybralem Szukanie zaawansowane). Mozna stosowac rozne operatory, ktore nie sa niestety nigdzie opisane :(

Jak bede mial chwile czasu to opisze cos wiecej na ten temat, a jak juz bedzie gotowe, to mozna bedzie potestowac trafnosc wyszukiwan :)

Stay tuned.

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
0

Tylko po co się męczyć i zarzynać serwer, jeśli i tak nie osiągniemy takiej wydajności? Będzie umiał odmieniać końcówki? Będzie rozumiał kontekst zdania?

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
1
  • Solr ma obsluge synonimow
  • Ma obsluge szukania podobnych stron
  • Potrafi zasugerowac poprawny wynik wyszukiwania (tak jak google: "czy miales na mysli ....")
  • Facet search (czyli ile stron zostalo znalezionych w danych kategoriach i ew mozliwosc zawezenia listy)
  • Niezaleznosc od Google w kwestii zindeksowania danej strony lub nie (wiem, wiem, u nas od miesiaca indeks nie jest zaktualizowany. od zmiany serwera :( musze zobaczyc czemu cron nie dziala)
  • Wieksze opcje wyszukiwania (sortowanie, wyszukiwanie po uzytkownikach, w danej kategorii forum po tagach itp itd)
somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
5

Demonical, idź na kawę (wiesz z kim) i wyluzuj. Nawet ja cierpliwie czekam na efekty pracy Adama i nie marudzę.

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
2

Mozna potestowac na http://dev.4programmers.net/Forum

Login: testserv
Haslo: testserv

Zindeksowalem jedynie ostatnie 10k postow. Mam problem z synonimami :/ Otoz solr umozliwia ustawienie synonimow. W internecie mozna znalezc nawet pokazna baze synonimow. Tylko, ze wtedy wpisujac w szukarce test znajduje tez slowa ankieta ktore jest synonimem. Trzeba recznie taka sensowna baze stworzyc :/

aurel
  • Rejestracja: dni
  • Ostatnio: dni
1

A na innych forach to jest tak, że masz wyszukiwarkę na głównej, i ta szuka po całym forum, ale jak wejdziesz do jakiegoś działu, to masz też wyszukiwarkę, tylko szukającą tylko po tym dziale. A jak wejdziesz do topiku... to możesz przeszukać tylko dany topik.
Czyż to nie brzmi ergonomicznie?

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
1

Tak tez zrobilem. No, moze nie calkiem. Otoz dodalem szukanie w watkach:

14196804794f79aad27672f.png

Nie dodalem jednak szukania w poszczegolnych kategoriach forum, ale to nie problem :) Brzmi sensownie. Kto jest za? :)

aurel
  • Rejestracja: dni
  • Ostatnio: dni
0

A no to bardzo fajnie i w dobrą stronę, ale czemu w temacie szukajka jest w innym miejscu w layoucie niż na głównej? Nawet bym nie pomyślała, by spojrzeć na dół strony. Według mnie, powinno to być spójne.

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Jest na gorze (spojnie, z kazda podstrona) oraz na dole tez :)

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Hmm sam nie wiem, czy ludzie nie beda sie glubic. Poniewaz takim tokiem rozumowania, bedac aktualnie w widoku watku, nie bedzie mozliwe wyszukanie czegos poza tym watkiem ;/ I beda zarzuty ze wyszukiwarka nic nie znajduje :D

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
1

Wyszukiwarka ma działać z każdego miejsca i szukać wszędzie, ale można dodać opcje domyślnie włączone, że będąc w wątku szuka w wątku, będąc w dziale szuka w dziale, ale na stronie wyników musi to być jednoznacznie widoczne by w przypadku, gdy user chce szukać z wątku na całym forum kliknął potem w 1 opcję i zmienił kryteria szukania. Tak to widzę.

iooi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 573
0

Albo zwyczajnie rozdzielić wyniki:

Wyniki wyszukiwania:
W tym wątku / dziale:
...
Reszta:
...

Tzn. że mamy dostępne od razu wszystkie wyniki, ale jeśli szukamy w wątku, to najbardziej trafne są wyniki z tego właśnie wątku.

// Jednak myśl Marooneda lepsza.

Adam Boduch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11950
0

Wyszukiwarka wstawiona na produkcje. Wciaz trwa indeksacja forum, poki co 300k postow zindeksowane.
Juz znalazlem problem: http://redmine.boduch.net/issues/443

W zwiazku z tym proponuje aby zakladka "Moje" przekierowywala do wyszukiwarki, tak, aby mozliwe bylo wyswietlenie postow danego usera. Obecnie bowiem jest to wyswietlanie w formie watkow. Ma to zwiazek z zadaniem: http://redmine.boduch.net/issues/440

Coldpeer
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Londyn
0
  1. Czy searchbox w prawym górnym rogu nie powinien mieć napisu "Szukaj w serwisie" zamiast "Szukaj na forum"? Wszak przeszukuje też artykuły.
  2. Wpisałem w tego searchboksa "delphi", przeszedłem następnie na stronę główną i oto efekt (załącznik)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.