Volltextsuche

Hallo zusammen,

ich habe mir die Volltextsuche von http://www.widiker.de/download.php?sc=9 zugelegt, und sie schon soweit angepasst das ich ungerne noch auf ein anderes Script wechseln möchte!

Original-Code:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>PHP-Suchmaschine</title>
	<style>
	body,td,input { font-family:Verdana;font-size:7.9pt }
	.t_nummer { font-family:Verdana,Tahoma,Arial; font-size:16pt; font-weight:bold; color:#999999}
	.markierung {color:#ff0000}
	</style>
</head>

<body>

<?
// error_reporting(0);
########### PHP-Suchmaschine ###########
########### powered by Viktor Widiker & http://www.widiker.de, Berlin 2002 ###########

########### Hier folgen die Einstellungen ###########

$max_suchwoerter=3; # Maximale Anzahl der Suchwörter, die wahrgenommen werden

$treffer_pro_seite=10; # Wie viele Treffer werden pro Ergebnisseite angezeigt?

$endungen=array("html","htm","php","phtml"); # Dateien mit welchen Endungen werden durchsucht?

$pfade_gesamt="./"; # Adressen (relativ zum Suchmaschinennskript) der zu durchsuchenden Ordner (durch Kommata trennen!)

$max_stelle=200; # Maximale (ungefähre) Länge (in Zeichen) der ersten gefundenen Textstelle

$mehr_laenge=200; # Maximale (ungefähre) Länge (in Zeichen) des Strings für weitere Vorkommnisse

########### Ab hier folgt die Suche #######
// Umstellung auf reg_glo=Off Anfang
$PHP_SELF = $_SERVER['PHP_SELF'];
$SERVER_NAME = $_SERVER['SERVER_NAME'];
// $SERVER_NAME = "http://www.domain.de/ordner";
foreach($_POST as $key => $value) {
  $$key = isset($_POST[$key]) ? $_POST[$key] : "";
}
foreach($_GET as $key => $value) {
  $$key = isset($_GET[$key]) ? $_GET[$key] : "";
}
// Umstellung auf reg_glo=Off ENDE

if (!isset($grossschreibung)) { $grossschreibung=0; }
if (!isset($ganzewoerter)) { $ganzewoerter=0; }
if (!isset($index)) { $index=0; }

$suchtext=trim(stripslashes($suchtext));
if ($grossschreibung==0) { $suchtext=strtolower($suchtext); }
$suchtext=ereg_replace(","," ",$suchtext);
$suchtext2=array(); $suchwoerter=array();
$suchtext2=explode(" ",$suchtext);
foreach ($suchtext2 as $einwort)
{
if (($einwort!="") && (count($suchwoerter)<=($max_suchwoerter-1)) && (!in_array($einwort,$suchwoerter)))
{ array_push($suchwoerter,$einwort); }
}
$suchtext=implode(" ",$suchwoerter);
?>

<form action="<? echo "$PHP_SELF"; ?>" method="post">
<table width="500" cellpadding="5" cellspacing="0" border="0" bgcolor="#ccddee" align="center">
<tr>
<td align="right">
<?
echo "<input type=\"text\" name=\"suchtext\" size=\"";
$browser=$HTTP_USER_AGENT;
if (1*strpos(strtolower($browser),"msie")>0) { echo "25"; } else { echo "14"; }
echo "\" value=\"".$suchtext."\"><br><br>";
?>
<input type="submit" value=" suchen ">
</td>
<td>
<b>Groß- und Kleinbuchstaben</b><br>
<input type="radio" name="grossschreibung" value="1" <? if ($grossschreibung==1) echo "checked"; ?>>unterscheiden<br>
<input type="radio" name="grossschreibung" value="0" <? if ($grossschreibung==0) echo "checked"; ?>>nicht unterscheiden
</td>
<td>
<b>Art der Suche</b><br>
<input type="radio" name="ganzewoerter" value="1" <? if ($ganzewoerter==1) echo "checked"; ?>>nur ganze Wörter<br>
<input type="radio" name="ganzewoerter" value="0" <? if ($ganzewoerter==0) echo "checked"; ?>>Wortteile
</td>
</tr>
</table>
</form>

<?
if ($suchtext!="") { start(); ausgabe(); }

function start()
{
global $suchwoerter,$grossschreibung,$ganzewoerter,$dateinummer,$treffer,$max_stelle,$mehr_laenge;
global $endungen,$pfade_gesamt;
$dateinummer=0;
$treffer=array();
$pfade=array(); $pfade=explode(",",$pfade_gesamt);
	foreach ($pfade as $pfad)
	{
	$ordner=opendir($pfad);
		while ($eintrag=readdir($ordner))
		{
		$name=$pfad.$eintrag;
		$dateiname=explode(".",$eintrag);
		if (in_array($dateiname[1],$endungen))
			{
			$anzahl=0;
			$schluss=0;
			$gefundene_woerter=array();
			$datei=fopen($name,"r");
				while (!feof($datei))
				{
				$zeile=fgetss($datei,10000,"");
				if ($grossschreibung==0) { $zeile=strtolower($zeile); }
				
				$woerter=explode(" ",$zeile);
				foreach ($woerter as $wort)
				{
				foreach ($suchwoerter as $suchwort)
					{
					### ganze Wörter ###
					if ($ganzewoerter==0)
						{
						if (strstr($wort,$suchwort))
							{
							if (!in_array($suchwort,$gefundene_woerter)) { array_push($gefundene_woerter,$suchwort); }
							$anzahl++;
							$treffer["vorkommnisse"][$dateinummer]++;
							if ($anzahl==1)
								{
								$treffer["datei_url"][$dateinummer]=$name;
								
								$position=strpos($zeile,$wort);
								$wortlaenge=strlen($wort);
								$zeilenlaenge=strlen($zeile);
								if ($zeilenlaenge>$max_stelle)
									{
									$lside=$position-(($max_stelle-$wortlaenge)/2);
									$rside=$lside+$max_stelle;
									if ($lside<0) { $rside=$rside-$lside; $lside=0; }
									if ($rside>$zeilenlaenge) { $rside=$zeilenlaenge; }
									}
								else { $lside=0; $rside=$zeilenlaenge; }
								$stelle=substr($zeile,$lside,$rside-$lside);		
								$stelle=ereg_replace($wort,"<span class=\"markierung\">".$wort."</span>",$stelle);
								$stelle="...".$stelle."...";
								$treffer["textstelle"][$dateinummer]=$stelle;
								}
								else if ($anzahl==2) { $teil=ereg_replace(",","",$teil); $mehr=$teil; }
								else if ($anzahl>2)
									{
									if (strlen($mehr)<$mehr_laenge) { if ($mehr=="") { $komma=""; } else { $komma=", "; } $wort=ereg_replace(", ","",$wort); $mehr.=$komma.$wort; }
									else { if ($schluss!=1) {$mehr=$mehr." ..."; $schluss=1;} }
									}
							}
						}
						### ganze Wörter ENDE ###
						### Wortteile ###
						else
						{
						if ($wort==$suchwort)
							{
							if (!in_array($suchwort,$gefundene_woerter)) { array_push($gefundene_woerter,$suchwort); }
							$anzahl++;
							$treffer["vorkommnisse"][$dateinummer]++;
							if ($anzahl==1)
								{
								$treffer["datei_url"][$dateinummer]=$name;
								
								$position=strpos($zeile,$wort);
								$wortlaenge=strlen($wort);
								$zeilenlaenge=strlen($zeile);
								if ($zeilenlaenge>$max_stelle)
									{
									$lside=$position-(($max_stelle-$wortlaenge)/2);
									$rside=$lside+$max_stelle;
									if ($lside<0) { $rside=$rside-$lside; $lside=0; }
									if ($rside>$zeilenlaenge) { $rside=$zeilenlaenge; }
									}
								else { $lside=0; $rside=$zeilenlaenge; }
								$stelle=substr($zeile,$lside,$rside-$lside);		
								$stelle=" ".$stelle." ";
								$stelle=ereg_replace(" ".$wort." "," <span class=\"markierung\">".$wort."</span> ",$stelle);
								$stelle="...".$stelle."...";
								$treffer["textstelle"][$dateinummer]=$stelle;
								}
								else if ($anzahl==2) { $teil=ereg_replace(",","",$teil); $mehr=$teil; }
								else if ($anzahl>2)
									{
									if (strlen($mehr)<$mehr_laenge) { if ($mehr=="") { $komma=""; } else { $komma=", "; } $wort=ereg_replace(", ","",$wort); $mehr.=$komma.$wort; }
									else { if ($schluss!=1) {$mehr=$mehr." ..."; $schluss=1;} }
									}
							}
						}
						### Wortteile ENDE ###
					}
					}
				}
				fclose($datei);
				$treffer["woerter"][$dateinummer]=count($gefundene_woerter);
				$treffer["mehr"][$dateinummer]=$mehr;
				if (count($gefundene_woerter)>0) { $dateinummer++; }
			}
		}
	closedir($ordner);
	}
	
}

function ausgabe()
{
global $treffer,$dateinummer,$PHP_SELF,$index,$SERVER_NAME,$treffer_pro_seite,$suchwoerter,$suchtext,$grossschreibung,$ganzewoerter;

echo "<table width=\"500\" border=\"0\" align=\"center\"><tr><td>\n";
echo "<span style=\"font-size:13pt\"><b>Ergebnisse der Suche:</b></span><br><br>\n";
$treffer_anzahl=count($treffer["datei_url"]);
if ($treffer_anzahl==0) { echo "<span style=\"font-size:13pt\"><b><center><br><br>Leider nichts gefunden<br><br></center></b></span></td></tr></table>\n"; }
else
{
@array_multisort($treffer["woerter"],SORT_DESC,$treffer["vorkommnisse"],SORT_DESC,$treffer["datei_url"],$treffer["textstelle"],$treffer["mehr"]);
$suchtext=ereg_replace(" ",", ",$suchtext);
if (count($suchwoerter)>1) { echo "Gesuchte Wörter: "; } else { echo "Gesuchtes Wort: "; }
echo "$suchtext<br><br>\n";
$anfang=$index*$treffer_pro_seite+1;
$ende=$anfang+$treffer_pro_seite-1; if ($ende>$treffer_anzahl) { $ende=$treffer_anzahl; }
echo "<b>Treffer $anfang-$ende von insgesamt $treffer_anzahl Treffern, beste Treffer zuerst:<br><br>\n";
echo "</td></tr></table>\n";

for ($k=0;$k<$treffer_pro_seite;$k++)
{
$i=$index*$treffer_pro_seite+$k;
$platz=$i+1;
if ($platz<=$ende)
{
echo "<table width=\"580\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\n";
$t=1;
$treffer["datei_url"][$i]=ereg_replace("\./","",$treffer["datei_url"][$i]);
$datei=fopen($treffer["datei_url"][$i],"r");
	while ($t<7)
	{
	$zeile=fgetss($datei,1000,""); $zeile=trim($zeile);
		if ($zeile!="")
		{
		echo "<tr><td height=\"16\" colspan=\"2\">";
		echo "<span class=\"t_nummer\">".$platz.".</span> <a href=\"".$treffer["datei_url"][$i]."\"><b>".$zeile."</b></a>";
		break;
		}
	$t++;
	}
fclose($datei);
if ($treffer["woerter"][$i]==1) { $woerter="Wort"; } else { $woerter="Wörter"; }
if ($treffer["vorkommnisse"][$i]==1) { $vorkommnisse="Vorkommnis"; } else { $vorkommnisse="Vorkommnisse"; }
echo "<p style=\"margin-top:0pt; margin-bottom:0pt\" align=\"justify\">\n";
echo $treffer["textstelle"][$i]."<br>\n";
echo "<small><b>Weitere Vorkommnisse: </b>".$treffer["mehr"][$i]."</small></p></td></tr>\n";
echo "<tr><td><a href=\"http://".$SERVER_NAME."/".$treffer["datei_url"][$i]."\" target=\"_blank\">\n";
echo "<img src=\"newwindow.gif\" width=\"14\" height=\"10\" border=\"0\">\n";

echo " http://".$SERVER_NAME."/".$treffer["datei_url"][$i]."</a></td>\n";
echo "<td align=\"right\"><small><b>".$treffer["woerter"][$i]." ".$woerter." | ".$treffer["vorkommnisse"][$i]." ".$vorkommnisse."</b></small></td>\n";
echo "</td></tr></table><br><br>\n";
}
}
}

if ($treffer_anzahl>0) { echo "<center>Seite:   \n"; }
$j=ceil($treffer_anzahl/$treffer_pro_seite)-1;
for ($i=0;$i<=$j;$i++)
	{
	$zahl=$i+1;
	if (($index+1)!=$zahl) { echo "<a href=\"$PHP_SELF?suchtext=$suchtext&index=".$i."&grossschreibung=".$grossschreibung."&ganzewoerter=".$ganzewoerter."\">"; }
	echo $zahl;
	if (($index+1)!=$zahl) { echo "</a>"; }
	echo "   ";
	}
if ($treffer_anzahl>0) { echo "</center>\n"; }
}
########### Ende des Suchmaschinenskripts ###########
?>

</body>
</html>

So, nun zu meinem Problem:
Offensichtlich benutzt die Suche bei Eingabe von 2 Worten das OR-Prinzip.
Ich habe keine Idee wo ich ansetzen könnte, denn der User soll zwischen AND oder OR auswählen dürfen. (optional wäre natürlich "MATCHING" oder so auch noch eine Idee)

Ich bin für jeden noch so kleinen Hinweis dankbar!

LG
sNaKe


Edit:

Okay sowas hatte ich befürchtet.
Thread kann geschlossen werden, ich werde mir den ganzen Driss wohl doch eher in eine MySQL-Datenbank spidern.
 
Zurück
Oben