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.

3 Stron V  < 1 2 3 >  
Reply to this topicStart new topic
> wyszukiwarka, wydajna, z prawdziwego zdarzenia ;)
jupeter
post 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.

Cytat(rashid @ 10.05.2007, 10:11:48 ) *
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 winksmiley.jpg. 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
Go to the top of the page
+Quote Post
AcidBurnt
post 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%)
-----


fajny przykład na PostgreSQL:

http://www.depesz.com/index.php/2007/06/11...y-rozszerzanie/
Go to the top of the page
+Quote Post
rubinek
post 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 smile.gif

Jak wszystko ma swoje wady (trzeba go karmic danymi) ale jest baaaaaardzo szybki
Go to the top of the page
+Quote Post
Strzałek
post 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


--------------------
Go to the top of the page
+Quote Post
c3zi
post 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 ;-)


--------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Go to the top of the page
+Quote Post
NuLL
post 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 :)
Go to the top of the page
+Quote Post
rashid
post 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
Go to the top of the page
+Quote Post
kosmowariat
post 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%)
-----


Cytat(bela_666 @ 4.12.2005, 10:42:11 ) *
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)
Go to the top of the page
+Quote Post
Strzałek
post 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%)
-----


Cytat(NuLL @ 27.01.2009, 15:54:10 ) *
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.


--------------------
Go to the top of the page
+Quote Post
ropsiU
post 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 sad.gif Da się to jakoś rozsądnie rozwiązać?
Go to the top of the page
+Quote Post
pawel_
post 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
Go to the top of the page
+Quote Post
mr__y
post 27.02.2010, 15:02:16
Post #32





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
pawel_
post 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
Go to the top of the page
+Quote Post
Mikz
post 25.06.2010, 17:03:41
Post #34





Grupa: Zarejestrowani
Postów: 48
Pomógł: 3
Dołączył: 7.12.2007

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


Cytat(Sedziwoj @ 27.03.2007, 00:24:19 ) *
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 smile.gif


Odnośnie budowania indeksu słów, takie rozwiązanie stosuje np. phpBB.
Go to the top of the page
+Quote Post
Wave
post 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
Go to the top of the page
+Quote Post
ulow
post 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
Go to the top of the page
+Quote Post
Wave
post 30.06.2010, 23:13:52
Post #37





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Cytat(ulow @ 29.06.2010, 14:57:41 ) *
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?
Go to the top of the page
+Quote Post
ulow
post 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" smile.gif


--------------------
/dev/ulow
Go to the top of the page
+Quote Post
gothye
post 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
Go to the top of the page
+Quote Post
Sedziwoj
post 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%)
-----


Cytat(Mikz @ 25.06.2010, 18:03:41 ) *
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 smile.gif


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.
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3 >
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: 15.12.2019 - 02:00