Suchmascine

Franz

Erfahrenes Mitglied
Kann man eine Volltextsuchmaschine auch ohne MYSQL realisieren?`??

Kennt jemand einen Link oder hat ein fertiges Script`?````

Wäre ech super.
 
Klar geht's.

Im grundgenommen funktioniert es so: Du nimmst dir deinen such string und splittest den auf in einzelne Chars. Dann nimmst du deinen text in dem gesucht werden soll. Jetzt vergleichst du zeichen für zeichen. Stimmt das erste dann guckst du ob das zweite auch noch übereinstimmt. Wenn nicht dann fange wieder im such string von vorne an gehe aber im Text trotzdem einen weiter.

Geht bestimmt auch einfacher mit PHP string funktionen, aber das ist so der klassische weg.

So Long
TheVirus
 
hehe, naive-search lässt grüssen
es gibt gewisse algorithmen, die eine zeichenweise suche optimieren, aber wie wärs denn, gleich ganze wörter zu suchen?

mit

PHP:
$pos[0]=strpos($text,$suchstring);

bekommst du die erste Position des Vorkommens von $suchstring in $text.

anschliessend kannst du mit
PHP:
$aktpos=$pos[0];

$i=1;
while (($aktpos=strpos($text,$suchstring,$aktpos+1))!=0){
 $pos[$i]=$aktpos;
 $i++;
}
$anz=$i;

alle weiteren Vorkommen suchen, wobei die Positionen im Array $pos der Länge $anz (0 bis $anz-1) gespeichert sind.
 
kannst du mir bitte bitte ein ganzen beispiel coden...
deine variante klingt echt gut...

bidde bidde...bekommst auchn banner oder so auf meine page...
 
Das mit den nur 1 Zeichen suchen ist das es schneller wird. Es gehht nämlich schneller nur ein Zeichen zu suchen und falls es das nicht gibts zum nächsten Text zu gehen als anders.
 
@T&P: naja, ich frage mich ja, wie PHP das Textsuchen implementiert... :) die werden da sicher auch einiges optimiert haben, und nach dem ersten, nicht übereinstimmenden Zeichen abbrechen (sowie weitere, komplexere optimierungen benutzen)

@Franz: im prinzip kannst du den code direkt so umsetzen, wie er da steht, aber hier nochmal eine kompaktere und anwenderfreundlichere variante:
PHP:
//eingabe, aussgabe der strings
$text="aababaabbaababa";
$suchstring="ab";

echo "Text: $text<br>\n";
echo "Teil: $suchstring<br><br>\n";

//ab hier der eigentliche suchvorgang
$pos[0]=strpos($text,$suchstring);
$aktpos=$pos[0];

for ($anz=1;$aktpos=strpos($text,$suchstring,$aktpos+1);$anz++)
 $pos[$anz]=$aktpos;

//ausgabe der positionen
echo "$anz Vorkommen gefunden!<br>\n";
for ($i=0;$i<$anz;$i++)
 echo ($i+1).". Position: $pos[$i]<br>\n";
beachte: die erste Position im Wort ist 0, die zweite 1 usw.
gleiches gilt im array pos.
 
Danke. Aber es ist eingentlich nicht das was ich wollte.
Ich wollte meine Seite durchsuchen lassen. Jetzt habe ich schon zwei codeteile bekommen/gemacht...

PHP:
function list_dir($dirname) 
{ 
    if($dirname[strlen($dirname)-1]!='') 
        $dirname.=''; 
    static $result_array=array();  
    $handle=opendir($dirname); 
    while ($file = readdir($handle)) 
    { 
        if($file=='.'||$file=='..') 
            continue; 
        if(is_dir($dirname.$file)) 
            list_dir($dirname.$file.''); 
        else 
            $result_array[]=$dirname.$file; 
    }    
    closedir($handle); 
    return $result_array;

PHP:
<?php 
  echo "<HTML><BODY>"; 
  echo "<FORM ACTION=$PHP_SELF METHOD=POST> "; 
  echo "<INPUT TYPE=TEXT NAME=wort VALUE=$wort>"; 
  echo "<INPUT TYPE=SUBMIT VALUE=Durchsuchen></FORM>"; 
  $wort = strtolower(trim($wort)); 
  
if($wort) { 
  
  // Funktion zum Auslesen des Verzeichnisses 
  function read_dir($dir=".",$endung=".htm") { 
  settype($dateinamen,"array"); 
  if(!is_dir($dir)) return false; 
  $verzeichnis = dir($dir); 
  while($datei = $verzeichnis -> read()) { 
    if($datei[0] != "." && substr($datei,strlen($endung)*(-1)) == $endung) { 
    $dateinamen[] = $datei; 
    } 
  } 
  $verzeichnis->close(); 
  sort($dateinamen); 
  return $dateinamen; 
  } 
  
  // Das Hauptprogramm 
  $dateinamen = read_dir("."); 
  for($i=0;$i<count($dateinamen);$i++) { 
  $name = $dateinamen[$i]; 
  $datei = "$name"; 
  $start = 0; 
  $fp = fopen($datei,"r"); 
  while(!feof($fp)) { 
    $zeile = strtolower(trim(fgetss($fp,1024))); 
    if(strstr($zeile,$wort)) { 
    $name = substr($name,0,strlen($name)-4); 
    if (!$ergebnis) echo "Folgende Dateien enthalten Ihren Suchbegriff:<P>"; 
    echo "<A HREF=\"$datei\">$name()</A><BR>"; 
    $ergebnis++; 
    break; 
    } 
  } 
  fclose($fp); 
  } 
  if(!$ergebnis) echo "Keine passenden Dateien gefunden"; 
} 
echo "</BODY></HTML>"; 
?>

Der obere Teil soll den untern code so erweitern, dass er nicht nur ein verzeichnis durchsucht, sondern alle verzeichnisse, aber ich bring sie irgendwie nicht zusammen. kann mir da jemand helfen und die beiden codes zu verschmelzen...
MFG
 

Neue Beiträge

Zurück