Autor Zpráva
peteo
Profil
OK, rozchodil som vyhľadávanie na stránkach Heuréka.
Funguje, ako som si to predstavoval.

Teraz mi ide o vylepšenie.

Momentálne vyhľadávanie funguje ako prefix, teda na slovo zadané vo vyhľadávačí (napr. démon vyhodí i démonov, démonické a pod.).

Prosím poradiť v dvoch veciach:

(1)
ako zariaďiť, aby vyhľadávanie fungovalo:
presne
prefix
postfix.

(2)
ako zariadiť, aby vyhľadávanie vyhodilo výsledky bez ohľadu na interpunkciu a veľkosť písmen zadaných do vyhľadávača (napr. zadané súd, aby vyhodilo sud, Súd, suď a podobne - i podľa predvoľby (1)).

Ďakujem za pomoc i rady.
peteo
Profil
doplnenie:

kód http://heureka.tym.sk/vys.php?dotaz=:

<?
$dotaz = $_GET["dotaz"];
$stop="konieczaznamu";
$book=Array("a","b","c","d","e","f","g","h","ch","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","!","0-9");
echo "Hľadaný výraz: ";
echo $dotaz;
echo "<br><br>";
$pocet=0;
for ($i=0; $i<29; $i++) {
$soubor=fopen($book[$i], "r");
$text="";
while ($text<>$stop) {
$text=fgets($soubor);
$test=strpos($text,$dotaz);
if ($test === false) {
echo "";
} else {
echo "<hr><h1><span>";
echo $text;
$pocet++;
}
}
fclose($soubor);
}
echo "<hr><br>";
if ($pocet==1){
echo "Hľadanie ukončené, nájdený ";
}
if ($pocet>1 and $pocet<5){
echo "Hľadanie ukončené, nájdené ";
}
if ($pocet==0 or $pocet>4) {
echo "Hľadanie ukončené, nájdených ";
}
echo $pocet;
if ($pocet==1){
echo " záznam";
}
if ($pocet>1 and $pocet<5){
echo " záznamy";
}
if ($pocet==0 or $pocet>4) {
echo " záznamov";
}
?>
fajzen
Profil
(1)
to funguje už teraz

(2)
je to krkolomné, možno sa to dá aj inak a lepšie, ale mňa napadlo toto:

úplne na začiatok:
function odstran_diaktriku($text)
{
    $replaces = array(
        'a' => array('á', 'ä', 'Á'),
        'c' => array('č', 'Č'),
        'd' => array('ď', 'Ď')
        // a tak ďalej pre všetky písmenká, ktorých sa to týka
    );

    foreach($replaces as $default => $cases) {
        $text = str_ireplace($cases, $default, $text);
    }

    return $text;
}

za riadok 2:
$dotaz_ci = odstran_diaktriku($dotaz);

za riadok 13:
$text_ci = odstran_diaktriku($text);

riadok 14 zmeniť na:
$test = stripos($text_ci, $dotaz_ci);


nechce sa mi to testovať, písal som to z hlavy, ale hádam by to mohlo fungovať...

(3)
malo by sa tam dať obmedzenie na minimálny počet písmen vyhľadávaného reťazca.... ak tam dám napríklad len 'a', bude to chcieť vypísať úplne všetko - záťaž na server, na free hostingu ťa zrušia ani sa nenazdáš...

(4)
vyklašli sa na súbory, používaj databázu, je to rýchlejšie, ľahšie, výsledky sa budú dať stránkovať, menšia záťaž na server -> rýchlejši beh stránok
nosko
Profil
1)
a) tak ako to mas teraz
b) if (substr($text,0,strlen($dotaz)) == $dotaz) +- :)
c) podobne ako b, len upravis

2)
podla mna najskor budes musiet aj v hladanom slove, aj v slove, ktore si nacital zo suboru odstranit diakritiku a nasledne
http://us.php.net/manual/en/function.stristr.php

//too late :)
peteo
Profil
to je ten problém, fňuk, databázam nerozumiem, neviem s nimi pracovať, preto toto krkolomné riešenie.
ad 2.) ako preboha prevediem 100.000 hesiel do dbf (jednej, viacerých?). mám z toho chaos a málo času ...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0