Seite 1 von 1

Suche nach Wörtern mit 3 Buchstaben (z.B. mp3)

Verfasst: 19.06.2003 13:27
von likeatim
Ich bekomme es nicht hin, dass ich in meinem Board nach Wörtern mit weniger als 4 Buchstaben suchen kann (z.B. mp3).
Fatal ist auch, dass ich dann auch nicht die Kombinationen funktionieren (z.B. mp3 AND umwandeln).
Ich hab mich schon mal in der functions_search.php umgeschaut (in der Nähe von Zeile 60: "'words' that consist of <3 or >20 characters are removed"), aber eine Veränderung der Werte bringt nix....
liegt es vielleicht an phpBB 2.05?
In Version 2.04 sah die betreffende Stelle so aus:

Code: Alles auswählen

	if ( $mode == 'post' )
	{
		$entry = str_replace('*', ' ', $entry);

		// 'words' that consist of <3 or >20 characters are removed.
		$entry = preg_replace('/\b([a-z0-9]{1,2}|[a-z0-9]{21,})\b/',' ', $entry); 
	}
In Verrsion 2.05 sieht es jetzt so aus:

Code: Alles auswählen

	if ( $mode == 'post' )
	{
		$entry = str_replace('*', ' ', $entry);

		// 'words' that consist of <3 or >20 characters are removed.
		$entry = explode(' ', $entry);
		for ($i = 0; $i < sizeof($entry); $i++)
		{
			$entry[$i] = trim($entry[$i]);
			if ((strlen($entry[$i]) < 3) || (strlen($entry[$i]) > 20))
			{
				$entry[$i] = '';
			}
		}
		$entry = implode(' ', $entry);
	}
oder hat es was mit der funktion stopword_list zu tun? was macht die eigentlich?

Danke für die Hilfe!

Verfasst: 19.06.2003 13:48
von Acid
Hast du.. nachdem du die Werte geändert hast ..nochma einen Beitrag mit solch einem 3-Zeichen-Wort geschrieben ? Denn z.B. "mp3" muss natürlich erstma in der search Tabelle gespeichert werden.
oder hat es was mit der funktion stopword_list zu tun? was macht die eigentlich?
..eigentlich nicht. Was sie macht? s. dieses Thema

Verfasst: 19.06.2003 15:05
von likeatim
cool, mit dem neuen Beitrag geht's.
Und wie bekomme ich die alten Beiträge in die Suche? Muss ich dann den Suchindex neu erstellen und wie geht das?

Verfasst: 20.06.2003 09:49
von Acid
Such ma hier im Forum oder auf www.phpbbhacks.com nach "Rebuild Search Index".

Verfasst: 21.03.2004 12:25
von hope
Hi,

hier ein Änderung für alle die bestimmte kurze Wörter oder Zahlen indezieren möchten. functions_search.php ab ca. Zeile 61

Code: Alles auswählen

             
                 {
         $entry = str_replace('*', ' ', $entry);

        // 'words' that consist of <3 or >20 characters are removed.
        $entry = explode(' ', $entry);
        for ($i = 0; $i < sizeof($entry); $i++)
            {
             $entry[$i] = trim($entry[$i]);
             $found = '0';
             $searchshorty = array( 'a3','z3','F8','A7' );
             for ($b = 0; $b < count($searchshorty);$b++)
             {
                if ( $entry[$i] == $searchshorty[$b])
                        {
                        $found = '1';
                        }
             }
             if ( $found == '0')
             {
                if ((strlen($entry[$i]) < 3) || (strlen($entry[$i]) > 20))
                        {
                        $entry[$i] = '';
                        }
             }
          }
       $entry = implode(' ', $entry);
   }

Es ist nicht super professionell aber es funktioniert.

Gruss
Deniz

Verfasst: 22.03.2004 09:30
von likeatim
hope hat geschrieben:Hi,

hier ein Änderung für alle die bestimmte kurze Wörter oder Zahlen indezieren möchten. functions_search.php ab ca. Zeile 61

Code: Alles auswählen

             
                 {
         $entry = str_replace('*', ' ', $entry);

        // 'words' that consist of <3 or >20 characters are removed.
        $entry = explode(' ', $entry);
        for ($i = 0; $i < sizeof($entry); $i++)
            {
             $entry[$i] = trim($entry[$i]);
             $found = '0';
             $searchshorty = array( 'a3','z3','F8','A7' );
             for ($b = 0; $b < count($searchshorty);$b++)
             {
                if ( $entry[$i] == $searchshorty[$b])
                        {
                        $found = '1';
                        }
             }
             if ( $found == '0')
             {
                if ((strlen($entry[$i]) < 3) || (strlen($entry[$i]) > 20))
                        {
                        $entry[$i] = '';
                        }
             }
          }
       $entry = implode(' ', $entry);
   }

Es ist nicht super professionell aber es funktioniert.

Gruss
Deniz
kannst du den Unterschied zum "Werkscode" ein bisschen erklären?

Verfasst: 22.03.2004 14:37
von hope
im Prinzip wird in

Code: Alles auswählen

searchshorty = array( 'a3','z3','F8','A7' ); 
definiert welche Begriffe indeziert werden sollen die weniger als 3 Zeichen haben.

danach wird eine for-schleife durchlaufen die den eintrag mit dem Array vergleicht und beim matchen found auf '1' setzt. wenn found bei einem Durchlauf nicht auf 1 gesetzt ist, dann wird die Standard-Abfrage benutzt um wörter zwischen 3 und 20 Buchstaben zu indezieren. Es ist möglich das bei grossen Posts diese funktion lange dauert, da gab es ja schon Beiträge zu dem Problem, da die Schleife:

Code: Alles auswählen

for ($i = 0; $i < sizeof($entry); $i++) 
            { 
ja auch lange dauert und empfohlen wird abzuändern.

vielleicht gibt es einen eleganteren Vergleich, aber meine php-Kenntnisse reichen dafür nicht aus.[/code]