Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

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 ;)
chmolu
post 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ę:
  1. <?php
  2. array('jest', 'przykładowa', 'treść', 'artykułu');
  3. ?>

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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mr__y
post 27.02.2010, 15:02:16
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 9.10.2003

Ostrzeżenie: (0%)
-----


Cytat(ropsiU @ 27.11.2009, 12:16:33 ) *
A próbował się ktoś z polską morfologią w sphinxie?

Z tego, czego się doszukałem wynika, że bez rozszerzeń są dostępne morfologie angielska i rosyjska (conf-morphology), ale da się doinstalować stemmery do języków: danish, dutch, english, finnish, french, german, hungarian, italian, norwegian, portuguese, romanian, russian, spanish, swedish, turkish.

Poszukaj w google "morfologik".

W sphinxie jest możliwy jest stemming słownikowy, potrzebny jest plik tekstowy z parami wyrazów:
wyraz>forma podstawowa
wyraz>forma podstawowa
wyraz>forma podstawowa
...

Słownik z takimi parami dla języka polskiego można na pewno gdzieś dorwać w internecie smile.gif
Oczywiście taki słownik jest bardzo duży (kilka milionów par) i trochę odbije się to na wydajności samego Sphinx'a. Wzrośnie nie tylko czas indeksowania (co zazwyczaj nie jest takim dużym problemem) ale także czas wyszukiwania. W LF24.pl rozwiązaliśmy to trochę inaczej - stemming przeprowadzany jest "zewnętrznie", za pomocą memcached.
Indeksowanie nie odbywa się za pomocą xmlpipe2 - tzn. Sphinx nie indeksuje bezpośrednio z bazy, tylko plik XML generowany za pomocą skryptu. (Format tego pliku jest opisany w dokumentacji Sphix'a).
W czasie generowania tego pliku wszystkie wyrazy są stemmowane. Podobnie przed przesłaniem zapytania do bazy, wszystkie wyrazy są również stemmowane. Wymaga to trochę zabawy, ale pozwoliło skrócić czas wyszukiwania prawie dwukrotnie smile.gif
Jeśli baza nie jest jakaś gigantyczna a te kilka milisekund czasu wyszukiwania nie jest kluczowe można zostać przy prostszym rozwiązaniu stemming słownikowy w Sphinxie - opcja wordforms w Sphinxie.

Można ewentualnie pokusić się o napisanie własnego stemmera algorytmicznego dla języka polskiego - wydaje mi się, że widziałem taki projekt, więc jest to w ogóle możliwe smile.gif
Go to the top of the page
+Quote Post

Posty w temacie
- 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
- - zbig   Mysle , ze temat wyszukiwarek jest zbyt wielki zeb...   5.05.2007, 13:55:38
|- - rashid   Cytat(zbig @ 5.05.2007, 14:55:38 ) W ...   10.05.2007, 10:11:48
|- - 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


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 06:50