base
portal
Suche:
Forum
Start
Neue Seite erstellen
Titel:
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 <c>_fullsearch</c> an. Ansonsten verhält es sich ähnlich wie eine normale Datenbank-Abfrage. <achtung> <b>Verwenden Sie die Volltextsuche nicht als schlechten Ersatz für die Indizierung von Feldern!</b> Eine Adressverwaltung mit Feldern wie "Name", "Vorname", "PLZ", "Ort" sollten Sie weiterhin einzeln indizieren/sortieren und nicht versuchen, alles mit einer Volltextsuche zu erschlagen. </achtung> <b>Definition:</b> <codeparse> _fullsearch<i><Operator><Suchtexte> </codeparse> <b>Operator</b> = Bestimmt die Art der Übereinstimmung: <tab> Operator Bedeutung Möglicher Treffer bei Suche nach "leben" <c>~~</c> Suche irgendwo im Text; Ignoriere Gross/Klein-Schreibung ES WAR SEHR BE<b>LEBEN</b>D! <c>~=</c> Suche Wortanfang; Ignoriere Gross/Klein Diese <b>Leben</b>digkeit! <c>==</c> Suche exaktes Wort; Ignoriere Gross/Klein Das <b>Leben</b> ist schön. <c>~~!</c> Suche irgendwo im Text; Beachte Gross/Klein-Schreibung Das muss man er<b>leben</b>! <c>~=!</c> Suche Wortanfang; Beachte Gross/Klein Er ist sehr <b>leben</b>ding. <c>==!</c> Suche exaktes Wort; Beachte Gross/Klein Wie kann man so <b>leben</b>? </tab> <b>Suchtexte</b> = Texte nach denen gesucht wird, durch Kommas getrennt. Diese können durch vorangestellte Zusätze miteinander verknüpft werden. <tab> Zusatz Bedeutung <c>+</c> muss enthalten sein (UND) <c>-</c> darf nicht enthalten sein (NICHT) <c>(kein Zusatz)</c> bei mehreren: eins davon muss enthalten sein (ODER) </tab> <b>Beispiele:</b> <code> <do action=all _fullsearch==+hans,-stefan> </code> gibt alle Einträge aus, die auf jeden Fall "hans" enthalten und auf keinen Fall "stefan". <code> <loop _fullsearch==hans,stefan> ... </loop> </code> findet Einträge bei denen "hans" oder "stefan" enthalten ist Man kann die Volltextsuche auch mit "normalen" Feldabfragen kombinieren: <code> <loop _fullsearch==+andreas,berta,meyer,meier Alter<30 range=0,20> ... </loop> </code> 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. <note> 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 bor<b>der</b>=...> enthalten. </note> <h2>Reihenfolge und Sortierung bestimmen</h2> Sie können angeben, in welcher Reihenfolge und nach welcher Sortierung die Suche erfolgt. Im Gegensatz zum "normalen" <c>sort</c> einer Datenbank-Abfrage können Sie hier nur <i>ein</i> Feld angeben. <achtung> Das Feld, das die Such-Reihenfolge festlegt, muss als <c>sortiert</c> definiert sein. </achtung> <b>Definition:</b> <codeparse> fullsearch_sort=<i>[-]Name</i> </codeparse> Wenn Sie <c>fullsearch_sort</c> nicht angeben, wird nach den <i>neuesten</i> durchsucht. <b>Beispiele:</b> 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. <code> <loop _fullsearch==$suchbegriffe fullsearch_sort=-Punkte> ... </loop> </code> Wenn Sie die automatische Suchreihenfolge nach den <i>neuesten</i> Einträgen umkehren und also nach den <i>ältesten</i> suchen möchten, dann müssen Sie dies so angeben: <code> fullsearch_sort=Id </code> <h2>Suchbereich und Trefferanzahl festlegen</h2> 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. <b>Definition:</b> <codeparse> fullsearch_range=<i>[-]<Start>,<Anzahl zu durchsuchende Einträge></i> </codeparse> <codeparse> fullsearch_match=<i><Anzahl max. Treffer></i> </codeparse> <b>Beispiele:</b> <code> fullsearch_range=100,200 fullsearch_match=50 </code> sucht in den Datensätzen 100 bis 300 bis 50 Treffer erzielt wurden. Auch negative Angaben sind möglich: <code> fullsearch_range=-500,400 </code> durchsucht die obersten 400 der letzten 500 Einträge. Die max. Anzahl der Treffer ist standardmässig auf 10 gesetzt. <code> fullsearch_match=20 </code> sucht in den ersten 2500 Datensätzen bis 20 Treffer erzielt wurden. <knowhow> Je nach Sortierung und Bereich werden andere Einträge ausgegeben. Hier der Zusammenhang zwischen den 4 grundlegenden Möglichkeiten: Angenommen wir haben eine Datenbank mit dem Feld "Buchstabe" und 26 Einträgen für je einen Buchstaben, also einfach "a b c d e f g h i j k l m n o p q r s t u v w x y z". Die folgenden Parameterangaben führen dazu, dass die angegebenen Einträge in der angegebenen Reihenfolge durchsucht werden: <tab> Parameter Durchsuchte Einträge <c>fullsearch_sort=Buchstabe fullsearch_range=0,10</c> a b c d e f g i h j <c>fullsearch_sort=-Buchstabe fullsearch_range=0,10</c> j h i g f e d c b a <c>fullsearch_sort=Buchstabe fullsearch_range=-10,10</c> q r s t u v w x y z <c>fullsearch_sort=-Buchstabe fullsearch_range=-10,10</c> z y x w v u t s r q </tab> </knowhow> <h2>Variablen</h2> Nach einer Volltextsuche werden folgende Variablen mit Werten gefüllt: <tab> Name Bedeutung <c>$_fullsearch</c> Suchbegriffe <c>$_fullsearch_range</c> Starteintrag für die Volltextsuche <c>$_fullsearch_range_length</c> Anzahl der zu durchsuchenden Einträge <c>$_fullsearch_match</c> Anzahl der zu findenden Treffer <c>$_fullsearch_match_pos</c> Eine Position nach dem zuletzt gefundenen Treffer <c>$_fullsearch_amount</c> Anzahl der bei der Volltextsuche gefundenen Treffer <c>$_fullsearch_regex</c> Muster um im Text die Suchtexte zu markieren </tab> So können Sie feststellen wieviel Treffer erzielt wurden und ob die Datenbank schon komplett durchsucht wurde. Hier zwei nützliche Tests: <code> if($_fullsearch_range+$_fullsearch_range_length<$_amount_all) ... </code> Trifft die Bedingung zu, wurde der angegebene Bereich durchsucht, es sind aber noch Datensätze in der Datenbank vorhanden. <code> if($_fullsearch_match_pos<$_fullsearch_range+$_fullsearch_range_length) ... </code> Trifft die Bedingung zu, wurde die max. Anzahl Treffer gefunden und die Suche beim letzten Treffer abgebrochen. Interessant ist die Variable <c>$_fullsearch_regex</c>. baseportal ist so freundlich und stellt darin das Muster für eine <i>regular expression</i> bereit, mit der die Suchbegriffe in den Einträgen erkannt werden können. Ein passender Suchbegriff steht dann in <c>$1</c>: <code> $eintrag=~ s/$_fullsearch_regex/+++$1+++/g; </code> Stellt vor und hinter alle passenden Suchbegriffe in der Variablen <c>$eintrag</c> drei Plus-Zeichen "+++". <achtung> Achten Sie beim Ersetzungstext auf den <i>Slash</i> <c>/</c>, der für das Ende der <i>regular expression</i> steht - wenn Sie hier HTML-Code schreiben, müssen Sie darin befindliche Slash-Zeichen mit einem vorangestellten Backslash <c>\</c> "escapen". Oder Sie verwenden ein anderes Zeichen, z.B. ein <c>#</c> als Markierung für die <i>regular expression</i>: <code> $eintrag=~ s#$_fullsearch_regex#<b>$1</b>#g; </code></achtung> <h2>Komplettes Beispiel</h2> 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 <c>~~</c> suchen wir irgendwo im Text, auch mitten in Wörtern. Zwischen dem <code> out <<EOF; ... EOF </code> steht die Ausgabe eines gefundenen Eintrags. Hier haben wir die Felder "Titel", "Beschreibung" und "Kommentar" verwendet. In der <i>regular expression</i> werden die Suchbegriff fett und rot markiert. Die Variable <c>$newrange</c> 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. <code> <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ätzen"; } if($newrange<$_amount_all) { out "Es wurde noch nicht in allen Datensä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> </code>
Name:
Passwort:
Stichworte:
Version:
1
2
3 Angebot:
Alle
Nur Miete / Lizenz
Nur Miete / Lizenz professional
Nur Miete
Nur Miete smart + pro
Nur Miete smart + pro / Lizenz
Nur Miete pro
Nur Miete ab pure2, smart2, pro1
Nur Lizenz
Nur Lizenz professional
Nur Kostenlos
Ohne Änderungen zurück zur Seite
-
+
©
baseportal
GmbH. Alle Rechte vorbehalten.
powered in 0.01s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!