Autor Zpráva
sitole
Profil
Ahoj, hledám možnost jak vyhledávat na vlastním serveru pomocí jednoduchého souboru kam vše zapíšu..
Moje úvaha zní asi takto.. Budu mít soubor napříkald vyhledej.php kde budu mít vypsané veškeré stránky na mém webu (připíšu ručně)
vyhledej.php
Jak ustlal postel // http://bla.cz/jak-ustlat-postel
Jak uklidit pradlo // http://bla.cz/***

A takhle dále..
Ten zápis bude na 100% jinej ale i tak :D
No a když někdo něco zapíše do formu zobrazí se tam výsledky které pod tím sedí :)
Máte jiné nápady? :) Hlavně to hci udělat bez google a databáze. Děkuji za nápady
Keeehi
Profil
sitole:
Hlavně to hci udělat bez google a databáze.
Velmi špatný nápad. Vyhledávání je velmi komplexní záležitost. Navíc vyhledávání v češtině oproti angličtině přináší problémy se skloňováním. Dále tu jsou problémy s překlepy a pravopisnými chybami. Ty by měl systém vyhledávání být schopen poznat a ve správnou chvíli opravit. Pak tu jsou synonyma, nebo logicky podobná vyjádření. Jako třeba že na výraz "Jak urovnat postel" by se mi také mělo najít "Jak ustlat postel" protože evidntně mě to zajímá, jen jsem se nevyjádřil zrovna jako vy. Něco jednoduchého vytvořit jde, ovšem nemůžeš počítat s tím, že to bude fungovat tak dobře jako hledání googlu.

<form>
    <input type="text" name="search">
    <input type="submit" value="Hledat">
</form>
<?php
// vykucháno z Nette
function normalize($s) {
    $s = preg_replace('#[^\x09\x0A\x0D\x20-\x7E\xA0-\x{2FF}\x{370}-\x{10FFFF}]#u', '', $s);
    $s = strtr($s, '`\'"^~', "\x01\x02\x03\x04\x05");
    if (ICONV_IMPL === 'glibc') {
        $s = @iconv('UTF-8', 'WINDOWS-1250//TRANSLIT', $s);
        $s = strtr($s, "\xa5\xa3\xbc\x8c\xa7\x8a\xaa\x8d\x8f\x8e\xaf\xb9\xb3\xbe\x9c\x9a\xba\x9d\x9f\x9e"
            . "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3"
            . "\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
            . "\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x96",
            "ALLSSSSTZZZallssstzzzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTsraaaalccceeeeiiddnnooooruuuuyt-"
        );
    } else {
        $s = @iconv('UTF-8', 'ASCII//TRANSLIT', $s);
    }
    $s = str_replace(array('`', "'", '"', '^', '~'), '', $s);
    $s = strtr($s, "\x01\x02\x03\x04\x05", '`\'"^~');
    $s = strtolower($s);
    $s = preg_replace('#[^a-z0-9]+#i', '-', $s);
    $s = trim($s, '-');
    return $s;
}

$expressions = [
"Jak ustlat postel" => "http://bla.cz/jak-ustlat-postel",
"Jak uklidit pradlo" => "http://bla.cz/jak-uklidit-pradlo"
];

$phrase = isset($_GET['search']) ? $_GET['search'] : "";

$normalizedPhrase = normalize($phrase);

foreach ($expressions as $key => $value) {
    $normalizedKey = normalize($key);
    if (strpos($normalizedKey, $normalizedPhrase) !== false || strpos($normalizedPhrase, $normalizedKey) !== false) {
        echo "<a href=\"$value\">$value</a><br>\n";
    }
}
sitole
Profil
Jdu to otestovat :)


Funguje suprově.. (jedná se o základní verzi vyhledávání.. :)
Jenom.. Jak upravím tu dolní část taky, ayb místo vyhození odkazu jsem rovnou přešel na danou stránku? :)
Keeehi
Profil
sitole:
A co když člověk zadá "Jak"? Teď mu to zobrazí 2 odkazy. Nedá se určit, na který z nich by to mělo přejít.
sitole
Profil
Keeehi:
Jo jo.. :D Takže to necham takhle jen tomu dám formu :)
Jinak na řádku 40 to ukazovalo error :) Tzn.
    if (strpos($normalizedKey, $normalizedPhrase) !== false || strpos($normalizedPhrase, $normalizedKey) !== false) {
Nevíte čím to? :O (Vyhledávání ale normálně šlo)
Keeehi
Profil
sitole:
Jinak na řádku 40 to ukazovalo error :) Tzn.
Je to možné, psal jsem to rovnou z hlavy sem a netestoval to. Ale žánou chybu tam momentálně nevidím. Jaký error to vypsalo?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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