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 ;) |
24.06.2007, 23:43:35
Post
#21
|
|
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
|
|
|
25.06.2007, 17:52:10
Post
#22
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 1 Dołączył: 13.04.2003 Skąd: z ławki przed blokiem Ostrzeżenie: (0%) |
|
|
|
27.05.2008, 13:33:38
Post
#23
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 21.03.2005 Ostrzeżenie: (0%) |
Sphinx -> http://www.sphinxsearch.com/ -> i posprzatane
Jak wszystko ma swoje wady (trzeba go karmic danymi) ale jest baaaaaardzo szybki |
|
|
11.10.2008, 15:25:16
Post
#24
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) |
Jednak nie każdy ma możliwość instalacji na swoim serwerze Sphinx'a.
Po za tym - ktoś tego używa? Wygląda bardzo interesującą. Ten post edytował Strzałek 11.10.2008, 15:28:54 -------------------- |
|
|
8.11.2008, 12:39:52
Post
#25
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%) |
Tak, ktoś używa. Jest bardzo wydajny jeśli chodzi o wyszukiwanie. Do tego indeksy również dosyć szybko przebudowuje (oczywiście zależy od rozmiaru),
ale nie trwa to zazwyczaj więcej niż kilka minut (to już naprawdę duży indeks musi być!). Konfiguracja też jest rozbudowana i dobrze opisana w dokumentacji lub wiki sphinx'a(aczkolwiek często 3ba sięgać do forum). No i do tego dosyć fajne api do PHP. Można nakładać wagi na poszczególne kolumny z bazy i wiele innych ;-) -------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
27.01.2009, 15:54:10
Post
#26
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) |
A czy Sphinx potrafi indeksowac kilka tabel z danymi i wypluc wynik wyszukiwania na bazie trafnosci ze wsystkich tabel lacznie ?
-------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
31.01.2009, 12:33:57
Post
#27
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 22.11.2003 Ostrzeżenie: (0%) |
Sphinx indeksuje dane z dowolnego zapytania, wiec mozesz tez porobic JOINy w tym zapytaniu. Jest sporo mozliwosci konfiguracyjnych, z penwoscia uzywajac Sphinxa bedziesz w stanie cos takiego zrealizowac, chociaz byc moze czesciowo z logika poza Sphinxem.
-------------------- Robert Janeczek
G-Forces Web Management Polska robert.janeczek@gforces.pl |
|
|
27.02.2009, 10:44:04
Post
#28
|
|
Grupa: Zarejestrowani Postów: 235 Pomógł: 17 Dołączył: 18.07.2007 Skąd: Białystok Ostrzeżenie: (0%) |
http://lucene.apache.org/ - Javove ale zawsze można popatrzeć. W php też można korzystac z lucene. Polecam Zend_Search_Lucene (http://framework.zend.com/manual/en/zend.search.lucene.html) |
|
|
5.03.2009, 17:54:28
Post
#29
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) |
A czy Sphinx potrafi indeksowac kilka tabel z danymi i wypluc wynik wyszukiwania na bazie trafnosci ze wsystkich tabel lacznie ? Tak, można ustawić wagi dla poszczególnych pól wg. których będzie sumować trafność i dużo innch ciekawych rzeczy. Używałem Sphinxa razem z Railsami (Thinking Sphinx) i tam tak można było zrobić. Nie wiem czy to zostało zaprogramowane w pluginie czy sam sphinx to potrafi. Myślę jednak że to siedzi w sphinxie. -------------------- |
|
|
27.11.2009, 11:16:33
Post
#30
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 27.11.2009 Ostrzeżenie: (0%) |
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. Jak widać polskiego tu nie ma Da się to jakoś rozsądnie rozwiązać? |
|
|
4.12.2009, 11:19:22
Post
#31
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 12.12.2005 Ostrzeżenie: (0%) |
Ja używam czegoś takiego ( w sekcji index )
Kod charset_table = 0..9, a..z, _, A..Z->a..z, U+00C0->a, U+00C1->a, U+00C2->a, U+00C3->a, U+00C4->a, U+00C5->a, U+00C7->c, U+00C8->e, U+00C9->e, U+00CA->e, U+00CB->e, U+00CC->i, U+00CD->i, U+00CE->i, U+00CF->i, U+00D1->n, U+00D2->o, U+00D3->o, U+00D4->o, U+00D5->o, U+00D6->o, U+00D9->u, U+00DA->u, U+00DB->u, U+00DC->u, U+00DD->y, U+00E0->a, U+00E1->a, U+00E2->a, U+00E3->a, U+00E4->a, U+00E5->a, U+00E7->c, U+00E8->e, U+00E9->e, U+00EA->e, U+00EB->e, U+00EC->i, U+00ED->i, U+00EE->i, U+00EF->i, U+00F1->n, U+00F2->o, U+00F3->o, U+00F4->o, U+00F5->o, U+00F6->o, U+00F9->u, U+00FA->u, U+00FB->u, U+00FC->u, U+00FD->y, U+00FF->y, U+0100->a, U+0101->a, U+0102->a, U+0103->a, U+0104->a, U+0105->a, U+0106->c, U+0107->c, U+0108->c, U+0109->c, U+010A->c, U+010B->c, U+010C->c, U+010D->c, U+010E->d, U+010F->d, U+0112->e, U+0113->e, U+0114->e, U+0115->e, U+0116->e, U+0117->e, U+0118->e, U+0119->e, U+011A->e, U+011B->e, U+011C->g, U+011D->g, U+011E->g, U+011F->g, U+0120->g, U+0121->g, U+0122->g, U+0123->g, U+0124->h, U+0125->h, U+0128->i, U+0129->i, U+012A->i, U+012B->i, U+012C->i, U+012D->i, U+012E->i, U+012F->i, U+0130->i, U+0134->j, U+0135->j, U+0136->k, U+0137->k, U+0139->l, U+013A->l, U+013B->l, U+013C->l, U+013D->l, U+013E->l, U+0141->l, U+0142->l, U+0143->n, U+0144->n, U+0145->n, U+0146->n, U+0147->n, U+0148->n, U+014C->o, U+014D->o, U+014E->o, U+014F->o, U+0150->o, U+0151->o, U+0154->r, U+0155->r, U+0156->r, U+0157->r, U+0158->r, U+0159->r, U+015A->s, U+015B->s, U+015C->s, U+015D->s, U+015E->s, U+015F->s, U+0160->s, U+0161->s, U+0162->t, U+0163->t, U+0164->t, U+0165->t, U+0168->u, U+0169->u,U+016A->u, U+016B->u, U+016C->u, U+016D->u, U+016E->u, U+016F->u, U+0170->u, U+0171->u, U+0172->u, U+0173->u, U+0174->w, U+0175->w, U+0176->y, U+0177->y, U+0178->y, U+0179->z, U+017A->z, U+017B->z, U+017C->z, U+01A0->o, U+01A1->o, U+01AF->u, U+01B0->u, U+01CD->a, U+01CE->a, U+01CF->i, U+01D0->i, U+01D1->o, U+01D2->o, U+01D3->u, U+01D4->u, U+01D5->u, U+01D6->u, U+01D7->u, U+01D8->u, U+01D9->u, U+01DA->u, U+01DB->u, U+01DC->u, U+01DE->a, U+01DF->a, U+01E0->a, U+01E1->a, U+01E6->g, U+01E7->g, U+01E8->k, U+01E9->k, U+01EA->o, U+01EB->o, U+01EC->o, U+01ED->o, U+01F0->j, U+01F4->g, U+01F5->g, U+01F8->n, U+01F9->n, U+01FA->a, U+01FB->a, U+0200->a, U+0201->a, U+0202->a, U+0203->a, U+0204->e, U+0205->e, U+0206->e, U+0207->e, U+0208->i, U+0209->i, U+020A->i, U+020B->i, U+020C->o, U+020D->o, U+020E->o, U+020F->o, U+0210->r, U+0211->r, U+0212->r, U+0213->r, U+0214->u, U+0215->u, U+0216->u, U+0217->u, U+0218->s, U+0219->s, U+021A->t, U+021B->t, U+021E->h, U+021F->h, U+0226->a, U+0227->a, U+0228->e, U+0229->e, U+022A->o, U+022B->o, U+022C->o, U+022D->o, U+022E->o, U+022F->o, U+0230->o, U+0231->o, U+0232->y, U+0233->y, U+1E00->a, U+1E01->a, U+1E02->b, U+1E03->b, U+1E04->b, U+1E05->b, U+1E06->b, U+1E07->b, U+1E08->c, U+1E09->c, U+1E0A->d, U+1E0B->d, U+1E0C->d, U+1E0D->d, U+1E0E->d, U+1E0F->d, U+1E10->d, U+1E11->d, U+1E12->d, U+1E13->d, U+1E14->e, U+1E15->e, U+1E16->e, U+1E17->e, U+1E18->e, U+1E19->e, U+1E1A->e, U+1E1B->e, U+1E1C->e, U+1E1D->e, U+1E1E->f, U+1E1F->f, U+1E20->g, U+1E21->g, U+1E22->h, U+1E23->h, U+1E24->h, U+1E25->h, U+1E26->h, U+1E27->h, U+1E28->h, U+1E29->h, U+1E2A->h, U+1E2B->h, U+1E2C->i, U+1E2D->i, U+1E2E->i, U+1E2F->i, U+1E30->k, U+1E31->k, U+1E32->k, U+1E33->k, U+1E34->k, U+1E35->k, U+1E36->l, U+1E37->l, U+1E38->l, U+1E39->l, U+1E3A->l, U+1E3B->l, U+1E3C->l, U+1E3D->l, U+1E3E->m, U+1E3F->m,U+1E40->m, U+1E41->m, U+1E42->m, U+1E43->m, U+1E44->n, U+1E45->n, U+1E46->n, U+1E47->n, U+1E48->n, U+1E49->n, U+1E4A->n, U+1E4B->n, U+1E4C->o, U+1E4D->o, U+1E4E->o, U+1E4F->o, U+1E50->o, U+1E51->o, U+1E52->o, U+1E53->o, U+1E54->p, U+1E55->p, U+1E56->p, U+1E57->p, U+1E58->r, U+1E59->r, U+1E5A->r, U+1E5B->r, U+1E5C->r, U+1E5D->r, U+1E5E->r, U+1E5F->r, U+1E60->s, U+1E61->s, U+1E62->s, U+1E63->s, U+1E64->s, U+1E65->s, U+1E66->s, U+1E67->s, U+1E68->s, U+1E69->s, U+1E6A->t, U+1E6B->t, U+1E6C->t, U+1E6D->t, U+1E6E->t, U+1E6F->t, U+1E70->t, U+1E71->t, U+1E72->u, U+1E73->u, U+1E74->u, U+1E75->u, U+1E76->u, U+1E77->u, U+1E78->u, U+1E79->u, U+1E7A->u, U+1E7B->u, U+1E7C->v, U+1E7D->v, U+1E7E->v, U+1E7F->v, U+1E80->w, U+1E81->w, U+1E82->w, U+1E83->w, U+1E84->w, U+1E85->w, U+1E86->w, U+1E87->w, U+1E88->w, U+1E89->w, U+1E8A->x, U+1E8B->x, U+1E8C->x, U+1E8D->x, U+1E8E->y, U+1E8F->y, U+1E96->h, U+1E97->t, U+1E98->w, U+1E99->y, U+1EA0->a, U+1EA1->a, U+1EA2->a, U+1EA3->a, U+1EA4->a, U+1EA5->a, U+1EA6->a, U+1EA7->a, U+1EA8->a, U+1EA9->a, U+1EAA->a, U+1EAB->a, U+1EAC->a, U+1EAD->a, U+1EAE->a, U+1EAF->a, U+1EB0->a, U+1EB1->a, U+1EB2->a, U+1EB3->a, U+1EB4->a, U+1EB5->a, U+1EB6->a, U+1EB7->a, U+1EB8->e, U+1EB9->e, U+1EBA->e, U+1EBB->e, U+1EBC->e, U+1EBD->e,U+1EBE->e, U+1EBF->e, U+1EC0->e, U+1EC1->e, U+1EC2->e, U+1EC3->e, U+1EC4->e, U+1EC5->e, U+1EC6->e, U+1EC7->e, U+1EC8->i, U+1EC9->i, U+1ECA->i, U+1ECB->i, U+1ECC->o, U+1ECD->o, U+1ECE->o, U+1ECF->o, U+1ED0->o, U+1ED1->o, U+1ED2->o, U+1ED3->o, U+1ED4->o, U+1ED5->o, U+1ED6->o, U+1ED7->o, U+1ED8->o, U+1ED9->o, U+1EDA->o, U+1EDB->o, U+1EDC->o, U+1EDD->o, U+1EDE->o, U+1EDF->o, U+1EE0->o, U+1EE1->o, U+1EE2->o, U+1EE3->o, U+1EE4->u, U+1EE5->u, U+1EE6->u, U+1EE7->u, U+1EE8->u, U+1EE9->u, U+1EEA->u, U+1EEB->u, U+1EEC->u, U+1EED->u, U+1EEE->u, U+1EEF->u, U+1EF0->u, U+1EF1->u, U+1EF2->y, U+1EF3->y, U+1EF4->y, U+1EF5->y, U+1EF6->y, U+1EF7->y, U+1EF8->y, U+1EF9->y
|
|
|
27.02.2010, 15:02:16
Post
#32
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 1 Dołączył: 9.10.2003 Ostrzeżenie: (0%) |
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 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 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 |
|
|
1.03.2010, 12:02:27
Post
#33
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 12.12.2005 Ostrzeżenie: (0%) |
Skrypcik:
Kod <?php # ten plik ściągamy z http://www.sjp.pl/slownik/odmiany/ echo "Pobieranie słownika odmian\n"; passthru("wget http://sjp.pl/slownik/odmiany/sjp-odm-20090114.tar.gz -O sjp-odm-20090114.tar.gz"); passthru("rm -rf odm.txt"); passthru("tar zxf sjp-odm-20090114.tar.gz"); $uchwyt = fopen("odm.txt", "r"); $zapis = fopen("odmiany.sphinx", "w+"); // odmiany echo "Jedna kropka to 1000 słów\n"; echo "Tworzenie słownika odmian\n"; $i = 0; while (!feof($uchwyt)) { $linia = explode(", ", fgets($uchwyt)); $pierwszy = trim(array_shift($linia)); if (!empty($pierwszy)) { fwrite($zapis, $pierwszy.' > '.implode(' ', $linia)); } if ((++$i%1000) == 0) { echo "."; } } fclose($uchwyt); fclose($zapis); # ten natomiast z http://synonimy.ux.pl/ echo "Pobieranie słownika synonimów\n"; passthru("wget http://switch.dl.sourceforge.net/sourceforge/synonimy/thesaurus-1.5.txt.gz -O thesaurus-1.5.txt.gz"); passthru("gunzip thesaurus-1.5.txt.gz"); // tezaurus echo "\nJedna kropka to 100 słów"; echo "\nTworzenie słownika synonimów\n"; $uchwyt = fopen("thesaurus-1.5.txt", "r"); $i = 0; while (!feof($uchwyt)) { $linia = explode(";", fgets($uchwyt)); $pierwszy = trim(array_shift($linia)); if (!empty($pierwszy)) { fwrite($zapis,$pierwszy.' > '.$pierwszy."\n"); if (!empty($linia)) { foreach ($linia as $wyraz) { if (false === strpos($wyraz, ' ')) { fwrite($zapis,trim($wyraz).' > '.$pierwszy."\n"); } } } } if ((++$i%1000) == 0) { echo "."; } } Było aktualne w wakacje, mogły się linki pozmieniać. Odpalasz i masz odpowiedni plik z odmianami i bliskoznacznymi. W indexie dodajesz wordforms = /<sciezka>/odmiany.sphinx Ten post edytował pawel_ 1.03.2010, 12:05:48 |
|
|
25.06.2010, 17:03:41
Post
#34
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 3 Dołączył: 7.12.2007 Ostrzeżenie: (0%) |
pawkow to rozwiązanie jest kiepskie, ponieważ przy pojawieniu się nowego artykułu, nie masz możliwości usunięcia bufora. A jakbyś to robił, to by było takie samo obciążenie, jak przy użyciu samego LIKE. Przy każdym wybraniu musiał byś rozdzielać dane, co też generuje obciążenie. Jeszcze sam nie wnikałem w ten problem, ale przy tym co się chwile zastanowiłem, to chyba najlepsze rozwiązanie to word | id_article przy czym unikalne jedynie mogło by być połączenie obu. Przy założeniach szukania samego artykułu bez cytatu. Bo chyba jednak problem nie może być rozwiązany aby był mało obciążający pamięciowo i obliczeniowo. Sedziwoj, nie jestem przekonany co do tego co mówisz. Znaczy oczywiście nie pozbywamy się obciążającego LIKE'a, ale można zrobić relację many-to-many zamiast takiej dziwnej kolumny z separatorami | i przy ponownym wyszukiwaniu takim zapytaniem z LIKE określić w WHERE tylko te rekordy których czas utworzenia lub modyfikacji jest późniejszy niż czas utworzenia rekordu wyszukiwania. To tak bez wdawania się w niepotrzebne szczegóły. Za to problem który widzę to dodatkowe obciążenie bazy przy zapisywaniu wyników wyszukiwania, literówki popełnione przez wyszukujących i tak dalej pawel_ - dzięki za ten skrypt, a właściwie za metodę z tymi słownikami Odnośnie budowania indeksu słów, takie rozwiązanie stosuje np. phpBB. |
|
|
29.06.2010, 12:15:30
Post
#35
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 6 Dołączył: 13.01.2005 Ostrzeżenie: (0%) |
Na czym polega wyszukiwanie z użyciem indeksu słów?
Jak rozwiązujecie kwestię wyznaczania popularnych wyszukiwań? Np. http://warszawa.gumtree.pl/c-PopularSearches |
|
|
29.06.2010, 13:57:41
Post
#36
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 4 Dołączył: 18.05.2010 Ostrzeżenie: (0%) |
Indekser zapisuje w bazie/pamięci/gdzie chcesz pojedyncze słowa, ich ilość i miejsce występowania na stronie.
Co do popularności wyszukiwania, strona którą podałeś robi to na podstawie 1/2 słów. Można stworzyć tabelę w bazie i przy wyszukiwaniu sprawdzać czy takie słowo już w tej tabeli jest. Jeżeli nie ma: dodajesz je i ustawiasz wartość na 1, jeżeli już jest: zwiększasz ostatnią wartość o 1 i potem listujesz od największej do najmniejszej -------------------- /dev/ulow
|
|
|
30.06.2010, 23:13:52
Post
#37
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 6 Dołączył: 13.01.2005 Ostrzeżenie: (0%) |
Co do popularności wyszukiwania, strona którą podałeś robi to na podstawie 1/2 słów. Można stworzyć tabelę w bazie i przy wyszukiwaniu sprawdzać czy takie słowo już w tej tabeli jest. Jeżeli nie ma: dodajesz je i ustawiasz wartość na 1, jeżeli już jest: zwiększasz ostatnią wartość o 1 i potem listujesz od największej do najmniejszej nie brzmi zbyt wydajnie i bezpiecznie dla bazy ale wydaje się jedynym sposobem. Co rozumiesz przez 1/2 słów? |
|
|
3.07.2010, 09:22:33
Post
#38
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 4 Dołączył: 18.05.2010 Ostrzeżenie: (0%) |
chodziło o "na podstawie jednego do dwóch słów"
-------------------- /dev/ulow
|
|
|
17.01.2011, 12:12:29
Post
#39
|
|
Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) |
podobne rozwiązanie wykorzystane jest w silniku forum phpbb3 , nazywanie native text
-------------------- Nie udzielam pomocy poprzez PW
|
|
|
16.06.2011, 09:18:49
Post
#40
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
Sedziwoj, nie jestem przekonany co do tego co mówisz. Znaczy oczywiście nie pozbywamy się obciążającego LIKE'a, ale można zrobić relację many-to-many zamiast takiej dziwnej kolumny z separatorami | i przy ponownym wyszukiwaniu takim zapytaniem z LIKE określić w WHERE tylko te rekordy których czas utworzenia lub modyfikacji jest późniejszy niż czas utworzenia rekordu wyszukiwania. To tak bez wdawania się w niepotrzebne szczegóły. Za to problem który widzę to dodatkowe obciążenie bazy przy zapisywaniu wyników wyszukiwania, literówki popełnione przez wyszukujących i tak dalej pawel_ - dzięki za ten skrypt, a właściwie za metodę z tymi słownikami Odnośnie budowania indeksu słów, takie rozwiązanie stosuje np. phpBB. Ogólnie ta kreska | miała oznaczać rozdzielenie nazw kolumn, nie łączenie stringa. Zresztą po latach wracając do tematu wiem że korzysta się z FTS, czy to tsearch2 w Postgresql <8.3 (od 8.3 rozszerzenie dołączyło do rdzenia bazy), czy to FTS w MySQL, czy Lucene (to jest sposób indeksowania, kody do obsługi są w różnych językach i pracują na jednym indeksie plikowym, bardzo fajne, tylko jak 2lata temu testowałem to wydajność kodu w PHP była żenująca, ale w java to śmigało jak głupie). -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
Wersja Lo-Fi | Aktualny czas: 27.09.2024 - 07:58 |