Suche optimieren
Hallo zusammen
Marco hat mal wieder am Kit gearbeitet und die Suche optimiert.
Hier sein Ergebnis für 1.6.03:
Suche in forum/searchresult.php
Ertsetze mit:
Suche in templates/forum/search.htm:
und ersetze mit
Die Erweiterung darf nur hier auf kitnetwork.de stehen und die Rechte liegen beim Autor Marco.
Keine Haftung fuer Schäden!!! Datensicherung anlegen!
Vorsicht bei Erweiterungen/Optimierungen, genau prüfen, oder nachfragen.
Copyrights sind nicht zu entfernen!
Marco hat mal wieder am Kit gearbeitet und die Suche optimiert.
Hier sein Ergebnis für 1.6.03:
Suche in forum/searchresult.php
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
if (trim($_POST['search_text'])!='') {
$search_text=str_replace('-'," OR ",str_replace('+'," AND ",trim($_POST['search_text'])));
$search_string=explode(" or ",strtolower($search_text));
$ic=1;
$search_text="(";
foreach($search_string as $i) {
$i=trim($i);
$i=eregi_replace(" "," AND ",$i);
if (eregi(" and ",$i)) {
$search_text.="(";
$ii=explode(" and ",strtolower($i));
$iic=1;
foreach ($ii as $iii) {
$iii=trim($iii);
if ($_POST['search_textoption']==1) $search_text.="(forumpost_title LIKE '%".$iii."%')";
else $search_text.="(forumpost_title LIKE '%".$iii."%' OR forumpost_text LIKE '%".$iii."%')";
if (count($ii)>$iic) {
$search_text.=" AND ";
$iic++;
}
}
$search_text.=")";
}
else {
if ($_POST['search_textoption']==1) $search_text.="(forumpost_title LIKE '%".$i."%')";
else $search_text.="(forumpost_title LIKE '%".$i."%' OR forumpost_text LIKE '%".$i."%')";
}
if (count($search_string)>$ic) {
$search_text.=" OR ";
$ic++;
}
}
$search_text.=")";
$searchstring.=" ".$search_text." ";
}
|
Ertsetze mit:
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# 07.01.08 Marco: Suche mit Kommentaren versehen und einige Fehlerchen bereinigt, damit nicht
# unbeabsichtigt mit "LIKE '%%'" gesucht wird, was natuerlich zu viele Treffer ergibt. Ausserdem
# sollte nun auch die Suche mit Autor UND Text klappen.
/*
* Die Suche arbeitet als einfache Teilwortsuche. Einzelne Woerter werden dabei mit "und" verknüpft,
* wenn es nicht anders notiert wird. Will man statt der "und" Suche eine "oder" Suche, dann muss man
* dafuer ein spezielles Verknuepfungszeichen benutzen. Nachfolgend werden über die Variablen $a (AND/UND)
* und $o (OR/ODER) diese Zeichen definiert.
* Bei der Suche hat das UND Vorrang vor dem ODER, folglich wird eine Suche nach:
* "husky UND podengo ODER briard UND pudel"
* interpretiert als
* "(husky UND podengo) ODER (briard UND pudel)"
* Analog zum kleinen 1x1 koennte man sagen UND-Suche geht vor ODER-Suche!
* Die Suche kennt aber keine Klammern um den Vorrang zu aendern. Obige Klammerung kann nicht in der Suche verwendet
* werden.
*/
$a='&'; /* Das UND-Zeichen */
$o='|'; /* Das ODER-Zeichen */
$search_text = strtolower(trim($_POST['search_text']));
if ($search_text!='') {
# Ersetze Kombinationen von ODER- ($a) und ODER-Symbolen ($o) durch das jeweils erste:
$search_text=eregi_replace(" *([\\$o\\$a])[\\$o \\$a]+","\\1",$search_text);
# Ersetze Leer- oder UND-Symbole zwischen Zeichen die nicht $a oder $o sind durch ein ' and ':
$search_text=eregi_replace("([^\\$o \\$a])[\\$a ]+([^\\$o \\$a])","\\1 and \\2",$search_text);
# Ersetze von Leerzeichen umrandete ODER-Symbole ($o) durch ' or ':
$search_text=eregi_replace(" *\\$o *"," or ",$search_text);
# Trenne die Suchausdruecke bei jedem ' or '
$or_terme=explode(" or ",$search_text);
$search_text="";
$add_or = false;
# Fuer jeden ODER-Ausdruck sammeln wir die UND-Ausdruecke:
foreach($or_terme as $or_term) {
if($add_or) $search_text.=' OR ';
else $add_or = true;
if (strpos(" and ",$or_term)>=0) {
# Wenn es ueberhaupt ein UND gibt:
$search_text.="(";
$and_terme=explode(" and ",$or_term);
$add_and = false;
foreach ($and_terme as $and_term) {
if($add_and) $search_text.=' AND ';
else $add_and = true;
$and_term=trim($and_term);
if ($_POST['search_textoption']==1) $search_text.="(forumpost_title LIKE '%".$and_term."%')";
else $search_text.="(forumpost_title LIKE '%".$and_term."%' OR forumpost_text LIKE '%".$and_term."%')";
}
$search_text.=")";
}
else {
# Wenn es kein UND gibt:
if ($_POST['search_textoption']==1) $search_text.="(forumpost_title LIKE '%".$or_term."%')";
else $search_text.="(forumpost_title LIKE '%".$or_term."%' OR forumpost_text LIKE '%".$or_term."%')";
}
}
if (empty($searchstring)) {
# Keine Suche nach Autor
$searchstring=" (" . $search_text . ")";
}
else {
# es ist bereits eine Bedingung vorhanden
$searchstring.=" and (" . $search_text . ")";
}
}
# 07.01.08 Marco: ENDE
|
Suche in templates/forum/search.htm:
|
|
Quellcode |
1 |
<font class="small">Begriffe durch OR (-) bzw. AND (+) verknüpfen.</font></td> |
und ersetze mit
|
|
Quellcode |
1 |
<font class="small">Begriffe durch ODER (|) bzw. UND (&) verknüpfen.</font></td> |
Die Erweiterung darf nur hier auf kitnetwork.de stehen und die Rechte liegen beim Autor Marco.
Keine Haftung fuer Schäden!!! Datensicherung anlegen!
Vorsicht bei Erweiterungen/Optimierungen, genau prüfen, oder nachfragen.
Copyrights sind nicht zu entfernen!
Gruss arras
@zonk: dürfte bei der verison 1.6.1 gleich aussehen, da gleiche datei.
Zitat
# 07.01.08 Marco: Suche mit Kommentaren versehen und einige Fehlerchen bereinigt, damit nicht
# unbeabsichtigt mit "LIKE '%%'" gesucht wird, was natuerlich zu viele Treffer ergibt. Ausserdem
# sollte nun auch die Suche mit Autor UND Text klappen.
/*
* Die Suche arbeitet als einfache Teilwortsuche. Einzelne Woerter werden dabei mit "und" verknüpft,
* wenn es nicht anders notiert wird. Will man statt der "und" Suche eine "oder" Suche, dann muss man
* dafuer ein spezielles Verknuepfungszeichen benutzen. Nachfolgend werden über die Variablen $a (AND/UND)
* und $o (OR/ODER) diese Zeichen definiert.
* Bei der Suche hat das UND Vorrang vor dem ODER, folglich wird eine Suche nach:
* "husky UND podengo ODER briard UND pudel"
* interpretiert als
* "(husky UND podengo) ODER (briard UND pudel)"
* Analog zum kleinen 1x1 koennte man sagen UND-Suche geht vor ODER-Suche!
* Die Suche kennt aber keine Klammern um den Vorrang zu aendern. Obige Klammerung kann nicht in der Suche verwendet
* werden.
Ähnliche Themen
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
[Suche] Downloadlimit Hack fürs Phpkit 1.6.0.3
(12. Januar 2008, 17:35)
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
Suche guten Chat
(6. Januar 2008, 23:59)



