|
Opis ogólny
Mainseek Search jest serwerem szczególnie dobrze nadającym się do wykorzystania jako wyszukiwarka produktów w sklepach internetowych, porównywarkach cen czy np. w serwisach aukcyjnych. Produkt ten jest rozwijany od 2002 roku i na jego bazie powstało już wiele serwisów (np. http://www.yellowpages.pl/, http://www.isbn.pl/, http://www.ojej.pl/, oferty.ojej.pl, a także inne). Przy rozwijaniu projektu szczególną uwagę zwrócono na szybkość odpowiedzi serwera jak i na możliwość obsługi wielu milionów rekordów (najwieksza implementacja została umieszczona na serwisie www.isbn.pl - ponad 70 mln książek). Wiele lat doświadczeń spowodowało, że w moduł ten wbudowano możliwości szczególnie przydatne w w/w typach serwisów i może z powodzeniem być używany jako zamiennik bazy danych. Dzieki tej funkcjonalnośći Mainseek Search może być w prosty sposób wykorzystany jako podstawowy silnik wielu aplikacji webowych. Ciągle też trwają prace nad ulepszaniem i przyspieszaniem Mainseek Search-a. Poniżej jest przedstawiona lista możliwości Mainseek Search-a, która sprawia że jest to unikalny produkt nie tylko na polskim rynku. Jako ciekawostkę można podać, że możliwe jest wykorzystanie modułu Mainseek Search-a jako wyszukiwarki internetowej (zobacz serwis szukaj.yp.pl). W tym przypadku, każda ze stron internetowych jest potraktowana jako oferta. Dane do tej wyszukiwarki zostały zebrane przy pomocy innego modułu firmy Mainseek - Spider-a.
Kluczem do zrozumienia działania wyszukiwarki produktów jest pojęcie produktu i oferty. Produkty sa dostępne w wielu sklepach internetowych (i nie tylko), ale w każdym z nich może mieć on inną cenę czy inne warunki dostawy. Ofertą jest właśnie dany produkt w konkretnym sklepie. W szczególności, możemy mieć do czynienia z produktem (np wycofanym ze sprzedaży) który nie ma żadnych ofert ale nic nie stoi na przeszkodzie, żeby ten produkt jako taki, mógł być znaleziony w wyszukiwarce. W Mainseek Search-u mamy zdefiniowane 3 typy rekordów które odpowiadają:
- produktowi
- ofercie do produktu
- ofertcie niezmapowanej (samotnej)
Moduły wyszukiwarki
W skład Mainseek Search-a wchodzą trzy moduły.
Pierwszym modułem jest Indexer. Mainseek search do pracy wykorzystuje specjalnie przygotowane pliki internalne. Indexer ma za zadanie przygotowanie tych plików a proces ten nazywamy indeksacją. Elementem wejściowym dla indeksera jest specjalny plik/pliki, tzw. IDX. Istnieją skrypty które z kolei generują pliki IDX np z bazy danych, ale format tych plków jest na tyle prosty że każdy poradzi sobie z ich odpowiednim wygenerowaniem. Szybkość indeksacji nie zależy od ilości rekordów a czas trwania indeksacji zależy głownie od wielkości poszczególnych rekordów (tekstów), szybkości dysków i wydajności procesora. Można przyjąć że średnio szybkość indeksacji wynosi ok 150tyś. rekordów na minute.
Drugi moduł to SearchServer, który z kolei zajmuje sie wlasciwym wyszukiwaniem rezultatow oraz komunikacja z uzytkownikiem. Komunikacja jest prowadzona za pomoca internalnego protokolu. Istnieje API do obslugi tego protokolu (wersja PHP,C i Java). Jest to aplikacja wielowatkowa a w pliku inicjalizacyjnym okresla sie maksymalna ilosc klientow, ktora moze byc jednoczesnie obslugiwana. Doświadczenie pokazuje że w zależności od ilości rekordów jak i wydajności komputerów możliwa jest obsługa ok 50 zapytań/sekunde. SeachServer może również korzystać z cache zapytań (w postaci modułu memcached module), co znacznie poprawia wydajność (pod warunkiem że zapytania sie powtarzają).
Ostatnim modułem jest SearchNode. Jego zadanie polega na odczytywaniu danych z dysku (tytul, property, url) i odsylanie je do klienta za pomocą SearchServer-a. SearchNode może byc uruchamiany na osobnej maszynie.

Lista możliwości
- Możliwość przypisania produktu do określonej kategorii. Można używać 2 niezależnych od siebie drzew kategorii jednocześnie. Możliwe jest oczywiście wyszukiwanie z uwzględnieniem jednego rodzaju z tych kategorii albo obu na raz.
- Możliwość zwrócenia tzw. hitmapy czyli ilości rezultatów w każdej z kategorii aktualnie rozwinietej dla podanego zapytania. Dzieki temu użytkownik może od razu zorientować się ile wyników się znalazło w każdej z kategorii. Hitmapa może być zwrócona dla obu drzew kategorii jednocześnie (może być jednopoziomowa lub dwupoziomowa).
- Możliwość przypisania ceny do oferty. Dzieki temu można w zapytaniu np. wyszukać ofert z podanego zakresu cenowego czy też posortować wyniki wg. ceny. Cena może być zmieniana bez konieczności reindeksacji plików IDX. Podobnie, niektóre pola rekordu (tzw. property mogą być zmieniane bez reindeksacji).
- Możliwość przypisania do oferty numeru sklepu. Dzieki temu, można zapytać o wyniki tylko w jednym sklepie a także policzyć ile rezultatów w każdym ze sklepów sie znalazło. Ponadto istnieje mechanizm dynamicznego blokowania sklepów (wyniki z nich są pomijane).
- Możliwość podania w rekordzie czasu zakończenia jego ważności (np. stosowane szeroko w implementacjach serwisow aukcyjnych).
- Mamy do dyspozycji system klastrow kategorii - umozliwia on tworzenie nowych, wirtualnych kategorii, zmiane nazw istniejacych juz kategorii, wycinanie lub przenoszenie calych galezi kategori. Ważne jest to, ze sama struktura kategorii sie nie zmienia. Wybierajac nazwe klastra niejako budujemy nowa strukture kategorii dla tego pojedynczego zapytania.
- Wbudowany system filtrów, filtry zalezne sa od kategorii, ktora jest podana w zapytaniu, istnieje rowniez mozliwość zbudowania zależności pomiedzy poszczególnymi filtrami (czyli np. filtr B nie bedzie wyświetlany tak dlugo aż nie zostanie wybrany filtr A)
- Istnieje mozliwość sztucznego podnoszenia pozycji wybranych ofert.
- Można wyszukiwać rezultaty wsród samych produktów i niezmapowanych ofer lub wszedzie: w produktach, ofertach zmapowanych i niezmapowanych
- W searchu jest zaimplementowana równoważność ü=ue, ö=oe, ë=ee, ß=ss (dla języka niemieckiego).
- Mozna podac liste stopword-ow (słów które są w zapytaniu pomijane)
- Mozna podac reguly dopuszczajace rownowaznosc pewnych okreslonych zestawien liter, np. f=ph, ai=ei, sh=sch, ll=l, sss=ss w wyrazach z zapytania.
- Istnieja 4 główne sposoby sortowania wynikow:
- wg trafności w stosunku do zapytania
- wg ceny - rosnąco
- wg ceny - malejąco
- losowo
- Server search-a mozna tak skonfigurowac aby korzystal z cache zapytan (wykorzystuje wtedy server memcached), daje to bardzo duze przyspieszenie w przypadku powtarzajacych sie zapytań.
- Można wyspecyfikować ktore elementy rekordu mają byc zwracane (np. ktore property, czy ma byc tytul, url, body (mozna podac maks. rozmiar body jaki moze zostac zwrocony).
- Mozna rowniez wymusic tzw. konkordacje tytulu i body (pogrubienie szukanych słów w wynikach).
- Mozna wyspecyfikowac dokładnie ktore słowa z zapytania musza sie pojawić i w ktorym z pól rekordu, można tez podać słowa, ktore sa opcjonalne (w szczególności wszystkie słowa moga być opcjonalne). Można również podać słowa które nie mogą się pojawić w znalezionych wynikach.
- Można usuwać pojedyńcze oferty bez konieczności reindeksacji.
- Można wprowadzić specjalne pola - atrybuty, w których można szukać podanych w zapytaniu słów.
- Można przypisać do oferty współrzędne georgaficzne i wtedy jest możliwość zwrócenia wyników tylko w określonym promieniu od podanego punktu (wykorzystuje sie to w lokalnych wyszukiwarkach).
- Można włączyć kompresję danych tekstowych, dzieki czemu można zaoszczędzić miejsce na dysku.
|