czolem. chcialem napisac wyszukiwarke w php, zeby przeszukiwala dane z pliku 9a w przyszlosci z bazy MySQL). i mam dwa problemy:
1. zna ktoś dobry algorytm na wyszukiwarkę? ja narazie mam taki, ze sprawdza czy slowo (slowa, zalezy ile wpisanych) znajduja sie w tekscie z pliku, a później jesli wszystkie wpisane wyrazy znalazly sie w tekscie (opisie, czy słowach kluczowych) to idą do góry, a te co najmniej pasuje do tekstu idą do dołu - ($ilosc_wyrazow_pasujacych / $ilosc_wyrazow_wpisanych) * 100, a później sortuje. zna ktoś leprzy?
2. - najwazniejszy, jak zrobić, żeby w tekście z pliku w jakiś sposób wyróżnić te wyrazy, które były wpisane do pola wyszukiwarki, powiedzmy pogrubuć.
[php]wyszukiwarka
wyszukiwarka
1. Jak narazie chyba najlepszy sposob to index slow - trzeba tylko miec informacje, ze jakis plik jest dodawany i wtedy go zaindexowac.
2. regex? przepuscic tekst przez
s/$slowo/<b>$slowo<\/b>/g
i masz juz pogrubienia
2. regex? przepuscic tekst przez
s/$slowo/<b>$slowo<\/b>/g
i masz juz pogrubienia
Re: [php]wyszukiwarka
Jeśli chcesz wyszykiwarke to ok! Ale bez mysql (bo ja go słabo znam)
Plik wygląda np tak:
NAZWA|OPIS MOZE FAJNY a|ADRES STRONY|
NAZWA1|OPIS MOZE LEPSZY b|ADRES STRONY|
[php]<?php
//opis wpisany w wyszukiwarke
$opis="a";
$plik=file("plik.txt");
for($i=0;$i<count($plik);$i++)
{
$tabela1=explode("|","$plik[$i]");
//tabela[0] to nazwa $tabela[1] to opis tabela[2] to adres strony
$opis1=explode(" ","$tabela[1]");
//sprawdza każde słowo z opisem
$b=0;
do{
if($opis=="$opis1[$b]")
$znaleziono="tak";
$b++;
}while($opis1[$b+1]!=NULL);
// albo równa się null zawsze mi się to myli
if($znaleziono=="tak")
echo "NAZWA: $table[1]<br> OPIS:$table[2]<br> ADRESS <a href=$table[2]>$table[2]</a> "; }
?>[/php]
to przykład na jedno słowo ale mozna to przerobić na wiele
Plik wygląda np tak:
NAZWA|OPIS MOZE FAJNY a|ADRES STRONY|
NAZWA1|OPIS MOZE LEPSZY b|ADRES STRONY|
[php]<?php
//opis wpisany w wyszukiwarke
$opis="a";
$plik=file("plik.txt");
for($i=0;$i<count($plik);$i++)
{
$tabela1=explode("|","$plik[$i]");
//tabela[0] to nazwa $tabela[1] to opis tabela[2] to adres strony
$opis1=explode(" ","$tabela[1]");
//sprawdza każde słowo z opisem
$b=0;
do{
if($opis=="$opis1[$b]")
$znaleziono="tak";
$b++;
}while($opis1[$b+1]!=NULL);
// albo równa się null zawsze mi się to myli
if($znaleziono=="tak")
echo "NAZWA: $table[1]<br> OPIS:$table[2]<br> ADRESS <a href=$table[2]>$table[2]</a> "; }
?>[/php]
to przykład na jedno słowo ale mozna to przerobić na wiele
Re: [php]wyszukiwarka
felix1988 -> polecam kurs czytania ze zrozumieniem
Możesz robić to tak (kompatybilne z mysql)
(w mysql-u robisz to na dwóch kolumnach, w jednej trzymasz słowa a w drugiej pliki [np. po spacji]) I jak dodajesz plik to go indeksujesz - dopisujesz nazwę pliku przy każdym słowie jakie w nim występuje, ew. dodajesz nowe rekordy. Jak szukasz, to przepisujesz to tablicy pliki z każdego wyrazu, który jest wyszukiwany (czyli jak ktoś szuka A BC D to przepisujesz listę plików z A, dopisujwesz pliki z BC i dopisujesz pliki z D). Na końcu liczysz, ile razy jaki plik wystąpił. (polecam zapisywac pliki w kluczach tabeli i kiedy się powtarza, po prostu zwiększać wartość przypisaną do pliku). Sortujesz podług tej wartości i otrzymujesz wynik.
Jeżeli chodzi o bold - jak wyżej, nic lepszego nie wymyslisz
Możesz robić to tak (kompatybilne z mysql)
Kod: Zaznacz cały
słowoA: plik1 plik2 plik3
słowoB: plik4 plik5Jeżeli chodzi o bold - jak wyżej, nic lepszego nie wymyslisz
Re: [php]wyszukiwarka
Co do wyszukiwania - jak chcesz zeby bylo zabawniej, to dla kazdego slowa nie zapisujesz tylko nazwy pliku, ale strukturke zawierajaca plik, id slowa poprzedniego, id slowa nastepnego (chodzi o slowa wystepujace w tym pliku - przed i po indexowanym slowie)i wtedy latwo dorobisz szukanie calych stringow, ew. mozesz podnosic celnosc trafienia, jesli iles slow wystepuje w takiej kolejnosci w jakiej jej ktos szuka.
Zamieszalem? (to dobrze
)
Teraz jeszcze bardziej - jesli danych jest duzo, to do osobnej tabeli wstawiaj id pliku + nazwe pliku jesli napotkasz nowe, a do tej pierwszej tabeli wstawiaj same id, a nie cale nazwy (oszczednosc miejsca).
Zamieszalem? (to dobrze
Teraz jeszcze bardziej - jesli danych jest duzo, to do osobnej tabeli wstawiaj id pliku + nazwe pliku jesli napotkasz nowe, a do tej pierwszej tabeli wstawiaj same id, a nie cale nazwy (oszczednosc miejsca).


