Jetzt kostenlos Anmelden!

arras Männlich

ist gerade angekommen

Beiträge: 18

Geschlecht: Männlich

PHPKIT Version: 1.6.03

1

Mittwoch, 16. Januar 2008, 01:29

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

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&uuml;pfen.</font></td>


und ersetze mit

Quellcode

1
		<font class="small">Begriffe durch ODER (|) bzw. UND (&amp;) verkn&uuml;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
  • Zum Seitenanfang
  • Zum Seitenende

Zonk Männlich

weiß wie man Threads erstellt

Beiträge: 152

Geschlecht: Männlich

Wohnort: Erfurt

PHPKIT Version: 1.6.5

2

Mittwoch, 16. Januar 2008, 09:06

Nun währe es auch noch Interessant was genau dies alles bewirken soll und wie dies bei der Version 1.6.1 geht.

LG Zonk
  • Zum Seitenanfang
  • Zum Seitenende

Roeders-World Männlich

"HellBoY the KiT"

Beiträge: 492

Geschlecht: Männlich

Wohnort: 63263 Neu-Isenburg

PHPKIT Version: 1.6.5

3

Mittwoch, 16. Januar 2008, 11:53

Habe es bei v 1.6.1 eingebaut und funzt auch.
  • Zum Seitenanfang
  • Zum Seitenende

archipage Männlich

kennt keine frische Luft

Beiträge: 456

Geschlecht: Männlich

PHPKIT Version: 1.6.1

4

Mittwoch, 16. Januar 2008, 15:35

@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.
  • Zum Seitenanfang
  • Zum Seitenende

arras Männlich

ist gerade angekommen

Beiträge: 18

Geschlecht: Männlich

PHPKIT Version: 1.6.03

5

Donnerstag, 17. Januar 2008, 00:39

Nun währe es auch noch Interessant was genau dies alles bewirken soll

LG Zonk
Steht doch als Erklärung mit im Quelltext.....
Gruss arras
  • Zum Seitenanfang
  • Zum Seitenende