baseportal
Suche: 
 Forum   Start 

Volltextsuche

 
Verstecken Inhalt
Die Volltextsuche durchsucht die komplette Datenbank nach angegebenen Suchtexten, die irgendwo in den Einträgen enthalten sind. Man gibt dazu als Such"feld" den speziellen Namen _fullsearch an. Ansonsten verhält es sich ähnlich wie eine normale Datenbank-Abfrage.

Definition:

_fullsearch<Operator><Suchtexte>

Operator = Bestimmt die Art der Übereinstimmung:

Suchtexte = Texte nach denen gesucht wird, durch Kommas getrennt. Diese können durch vorangestellte Zusätze miteinander verknüpft werden.

Beispiele:

<do action=all _fullsearch==+hans,-stefan>

gibt alle Einträge aus, die auf jeden Fall "hans" enthalten und auf keinen Fall "stefan".


<loop _fullsearch==hans,stefan> ... </loop>

findet Einträge bei denen "hans" oder "stefan" enthalten ist

Man kann die Volltextsuche auch mit "normalen" Feldabfragen kombinieren:

<loop _fullsearch==+andreas,berta,meyer,meier Alter<30 range=0,20> ... </loop>

Findet die ersten 20 Einträge in denen auf jeden fall "andreas" UND "berta" ODER "meyer" ODER "meier" enthalten sind und mit ein Alter unter 30 haben.



Die Volltextsuche findet die gesuchten Texte überall - z.B. auch in HTML-Tags. Wenn Sie also HTML-Code in Ihren Einträgen verwenden, wundern Sie sich nicht, wenn z.B. die Suche nach "der" auch Einträge findet, die <table border=...> enthalten.

Reihenfolge und Sortierung bestimmen

Sie können angeben, in welcher Reihenfolge und nach welcher Sortierung die Suche erfolgt. Im Gegensatz zum "normalen" sort einer Datenbank-Abfrage können Sie hier nur ein Feld angeben.

Definition:

fullsearch_sort=[-]Name

Wenn Sie fullsearch_sort nicht angeben, wird nach den neuesten durchsucht.

Beispiele:

Angenommen Sie haben eine Datenbank in der Texte abgelegt sind, die von den Nutzern bewertet werden können. Sie möchten nun eine Volltextsuche anbieten, die die passenden Texte mit den meisten Punkten zuerst ausgibt.

<loop _fullsearch==$suchbegriffe fullsearch_sort=-Punkte>
...
</loop>

Wenn Sie die automatische Suchreihenfolge nach den neuesten Einträgen umkehren und also nach den ältesten suchen möchten, dann müssen Sie dies so angeben:

fullsearch_sort=Id


Suchbereich und Trefferanzahl festlegen

baseportal sucht bei einer Volltextsuche als Vorgabe in maximal 2500 Datensätzen und bis 10 Treffer gefunden wurden. Sie können diese Vorgabe aber beliebig ändern oder angeben, welche Datensätze durchsucht werden sollen und so ein "Blättern" ermöglichen.

Definition:

fullsearch_range=[-]<Start>,<Anzahl zu durchsuchende Einträge>

fullsearch_match=<Anzahl max. Treffer>

Beispiele:

fullsearch_range=100,200 fullsearch_match=50

sucht in den Datensätzen 100 bis 300 bis 50 Treffer erzielt wurden.

Auch negative Angaben sind möglich:

fullsearch_range=-500,400

durchsucht die obersten 400 der letzten 500 Einträge. Die max. Anzahl der Treffer ist standardmässig auf 10 gesetzt.

fullsearch_match=20

sucht in den ersten 2500 Datensätzen bis 20 Treffer erzielt wurden.



Variablen

Nach einer Volltextsuche werden folgende Variablen mit Werten gefüllt:

So können Sie feststellen wieviel Treffer erzielt wurden und ob die Datenbank schon komplett durchsucht wurde. Hier zwei nützliche Tests:

if($_fullsearch_range+$_fullsearch_range_length<$_amount_all) ...

Trifft die Bedingung zu, wurde der angegebene Bereich durchsucht, es sind aber noch Datensätze in der Datenbank vorhanden.

if($_fullsearch_match_pos<$_fullsearch_range+$_fullsearch_range_length) ...

Trifft die Bedingung zu, wurde die max. Anzahl Treffer gefunden und die Suche beim letzten Treffer abgebrochen.


Interessant ist die Variable $_fullsearch_regex. baseportal ist so freundlich und stellt darin das Muster für eine regular expression bereit, mit der die Suchbegriffe in den Einträgen erkannt werden können. Ein passender Suchbegriff steht dann in $1:

$eintrag=~ s/$_fullsearch_regex/+++$1+++/g;

Stellt vor und hinter alle passenden Suchbegriffe in der Variablen $eintrag drei Plus-Zeichen "+++".


Komplettes Beispiel

Im folgenden ein kleines Suchskript, das auch mit sehr grossen Datenbanken zurecht kommt: Es lässt die ersten 10 Treffer oder max. 2500 Einträge (durch)suchen. Ist die Datenbank dann noch nicht zuende, kann der Nutzer weitersuchen lassen, bis die nächsten 10 Treffer gefunden oder die nächsten 2500 Einträge durchsucht sind.

Zu Beginn ein einfaches Eingabefeld für die Suchtexte. Die Suchwörter sind durch Leerzeichen zu trennen und können "+" und "-" vorangestellt bekommen. Aufgrund des ~~ suchen wir irgendwo im Text, auch mitten in Wörtern.

Zwischen dem

out <<EOF;
...
EOF

steht die Ausgabe eines gefundenen Eintrags. Hier haben wir die Felder "Titel", "Beschreibung" und "Kommentar" verwendet. In der regular expression werden die Suchbegriff fett und rot markiert.

Die Variable $newrange wird auf den Startpunkt der nächsten Suche gesetzt. Dann wird geprüft, ob schon alle Datensätze durchsucht wurden und wenn nicht, warum nicht (max. Treffer gefunden oder Suchbereich zuende). In diesem Fall wird dann ein Link mit den Suchwörtern und dem neuen Suchbereich zum Weiterblättern ausgegeben.

<form action="baseportal.pl?htx=$htx" method="post" enctype="multipart/form-data">
<input type="hidden" name="htx=" value="$htx">
Freie Suche: <input type="text" name="_fullsearch~~" value="$_fullsearch">
<input type="submit" value="Suchen">
</form>

<perl>

return if $_fullsearch eq "";

get "fullsearch_match=10";

while(get_next)
{
$out= <<EOF;
<b>$Titel</b><br>$Beschreibung - $Kommentar<p>
EOF
$out=~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
out $out;
}

my $newrange=$_fullsearch_range+$_fullsearch_range_length;
my $txt;

if($_fullsearch_match_pos<$newrange)
{
    $txt="Suche nach weiteren Treffern";
    $newrange=$_fullsearch_match_pos;
} else
{
    out "<b>Kein Treffer.</b><p>" if $_fullsearch_amount<1;
    $txt="Suche in weiteren Datens&auml;tzen";
}

if($newrange<$_amount_all)
{
    out "Es wurde noch nicht in allen Datens&auml;tzen gesucht: ";
    out "<a href=\"baseportal.pl?htx=$htx&_fullsearch~~".convert_url($_fullsearch). "&fullsearch_range=$newrange,$_fullsearch_range_length\">$txt</a>";
} else
{
    out "Die Datenbank wurde komplett durchsucht.";
}
</perl>

<br>

Letzte Änderung am 20.5.2008, 19:31 - Stichworte: Volltextsuche, Suche, _fullsearch, ~~, ~=, ==, ~~!, ~=!, ==!, +, -, fullsearch_sort, fullsearch_range, $_fullsearch, $_fullsearch_range, $_fullsearch_range_length, $_fullsearch_match, $_fullsearch_match_pos, $_fullsearch_amount, $_fullsearch_regex

c - o - + 
© baseportal GmbH. Alle Rechte vorbehalten.


powered in 0.02s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!