Mod zum Neuaufbau des Suchindexes

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt um einen neuen Mod zu entwicklen, geht's in phpBB 2.0: Mods in Entwicklung weiter.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Mod zum Neuaufbau des Suchindexes

Beitrag von PhilippK »

Hallo zusammen,

ich bin gerade dabei, meinen DB Maintenance Mod um eine Funktion zum Neuaufbau des Suchindexes zu ergänzen. Klappt auch recht gut - in den nächsten Tagen sollte es zumindest eine Beta geben.
Ziel ist auf jeden Fall, dass das Ding einen deutlichen Performance-Vorteil gegenüber dem Rebuild Search Index hat - und die ersten Ansätze sehen dazu recht gut aus :-)
Ich würde dazu jedoch noch gerne etwas an Ideen sammeln und suche daher noch andere Mods, die genau das gleiche bewerkstelligen. Kennt da jemand noch ander?

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
R. U. Serious
Mitglied
Beiträge: 153
Registriert: 11.10.2003 12:33
Kontaktdaten:

Beitrag von R. U. Serious »

Hallo Phillip,

das klingt sehr interessant. Es würde mich interessieren auf welchem Weg du die Neuerstellung performanter machst?


Folgende habe ich gefunden, aber nicht getestet:
http://www.phpbb.com/phpBB/viewtopic.php?t=83916

http://www.phpbb.com/phpBB/viewtopic.php?t=19630 (hier werden mehrere genannt, die aber wohl einander sehr ähnich sein dürften.)
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Hi R. U. Serious,

danke für die Links.
Der 'Trick' ist eigentlich der, dass ich auf die add_search_words() verzichte und dafür mit einer eigenen Funktion arbeite, die sich einem Array bedient (daher wird's Performance-Vorteile auch nur für PHP 4+ geben). Nachteil der add_search_words() ist, dass sie für die Abarbeitung von Einzelposts optimiert ist und nicht für die Massenverarbeitung.
Ob's funktioniert und ob's einen Geschwindigkeitsvorteil bringt, werde ich wohl heute abend wissen.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

So, habe da noch etwas rumgespielt: Tempobremse Nr. 1 sind übrigens die Synonym- und die Stopword-Dateien. Nachdem ich jetzt etwas rumgebastelt habe, gibt's bei mir teilweise eine Beschleunigung auf das Zehnfache (allerdings bei großen Dateien). Sind noch ein paar kleine Ungereimtheiten dabei - aber es sieht vielversprechend aus :-)

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
siebenschlaefer
Mitglied
Beiträge: 221
Registriert: 22.01.2003 19:36
Wohnort: md

Beitrag von siebenschlaefer »

Kann man denn den neuaufbau der suche um zwei neue felder ergänzen? Ich habe beispielsweise den "Neues Feld im Postingbereich" MOD von Acid eingebaut, dadurch gibt es nicht nur den Titel und den Nachrichtentext beim topic erstellen sondern auch noch sozusagen "Titel2". Wenn die searchtabelle vor dem rebuild geleert wird, fehlen mir nach dem rebuild alle einträge zu "Titel2" da diese beim rebuild nicht berücksichtigt werden - is ja auch klar. Erst wenn ich jetzt in jedes Topic gehe und "Titel2" neu poste wirds wieder in die Searchtabelle aufgenommen. Das macht natürlich ein wenig arbeit bei rund 2000 Topics :lol: Deshalb meine frage ob man das nachträglich relativ leicht mit einbauen kann?!

Das hier ist der code mit dem ich die sucheinträge für den normalbetrieb eingebaut habe:

Code: Alles auswählen

#########################################################################################
## 
## MOD Titel:       Neues Feld im Postingbereich
## MOD Version:     1.4.2 (phpBB 2.0.5 - 2.0.10)
## optionaler Teil: Suche nach Extrainformation 1.0.3 (nur phpBB 2.0.10)
## Autor:           Acid
##
## Beschreibung:    Mit dieser Erweiterung kann man nach der Extrainformation suchen.
##		    Aufgrund einiger Änderungen in der functions_search.php (2.0.10),
##		    funktioniert die folgende Anleitung nur mit phpBB 2.0.10.
##
## Dateien zu ändern:     6
##                        language/lang_german/lang_main.php
##                        includes/functions_post.php
##                        includes/functions_search.php
##                        search.php
##                        viewtopic.php
##                        templates/xxx/search_body.tpl
## 
#########################################################################################
## 
## Notizen:
## Vor jeglichen Änderungen an Datenbank/Dateien sollten dieser gesichert werden. 
##
## Wenn man mehr als ein neues Feld dem Postingbereich hinzugefügt hat, muss man folgende
## Schritte duplizieren und dabei jeweils die Bezeichnungen anpassen (auf Schreibweise
## achten, wie z.B. '$extra', '$topic_extra' oder 'TOPIC_EXTRA' etc.).
##
#########################################################################################
##
## Versionen:
##
## 1.0.3 - Code in functions_search.php angepasst (nur mit 2.0.10 kompatibel)
## 1.0.2 - Code fehlte bzw. war fehlerhaft (wenn man nur nach Extrainformation
##	   suchen wollte, farbliche Markierung der Suchergebnisse)
## 1.0.1 - angezeigte Extrainformation wird farblich markiert
## 1.0   - optionalen Teil hinzugefügt
##
#########################################################################################
#
#-----[ SQL ]-------------------------------------------
#  
# Folgender Query muss über phpmyadmin ausgeführt werden (Prefix anpassen)..

ALTER TABLE phpbb_search_wordmatch ADD extra_match TINYINT(1) default '0' NOT NULL;

# ..wenn man mehrere Felder hinzufügt/ändert, muss man den obigen Query duplizieren und
# den Feldnamen "extra_match" anpassen.
#
#########################################################################################
# 
#-----[ ÖFFNEN ]------------------------------------------
#  
# language/lang_german/lang_main.php
# 
#-----[ FINDE ]---------------------------------------------------
#
$lang['Search_title_msg'] = 'Titel und Text durchsuchen';

# 
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
$lang['Search_title_msg'] = 'Titel und Text durchsuchen';
$lang['Search_extra_only'] = 'Nur Extrainformation suchen';


#
#-----[ ÖFFNEN ]------------------------------------------
#  
# includes/functions_post.php
# 
#-----[ FINDE ]---------------------------------------------------
#
	add_search_words('single', $post_id, stripslashes($post_message), stripslashes($post_subject));

# 
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
	add_search_words('single', $post_id, stripslashes($post_message), stripslashes($post_subject), stripslashes($post_extra));


# 
#-----[ ÖFFNEN ]------------------------------------------
#  
# includes/functions_search.php
# 
#-----[ FINDE ]---------------------------------------------------
#
function add_search_words($mode, $post_id, $post_text, $post_title = '')
{
	global $db, $phpbb_root_path, $board_config, $lang;

	$stopword_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_stopwords.txt"); 
	$synonym_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_synonyms.txt"); 

	$search_raw_words = array();
	$search_raw_words['text'] = split_words(clean_words('post', $post_text, $stopword_array, $synonym_array));
	$search_raw_words['title'] = split_words(clean_words('post', $post_title, $stopword_array, $synonym_array));

# 
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
function add_search_words($mode, $post_id, $post_text, $post_title = '', $post_extra = '')
{
	global $db, $phpbb_root_path, $board_config, $lang;

	$stopword_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_stopwords.txt"); 
	$synonym_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_synonyms.txt"); 

	$search_raw_words = array();
	$search_raw_words['text'] = split_words(clean_words('post', $post_text, $stopword_array, $synonym_array));
	$search_raw_words['title'] = split_words(clean_words('post', $post_title, $stopword_array, $synonym_array));
	$search_raw_words['extra'] = split_words(clean_words('post', $post_extra, $stopword_array, $synonym_array));

# 
#-----[ FINDE ]---------------------------------------------------
#
		$title_match = ( $word_in == 'title' ) ? 1 : 0;

		if ( $match_sql != '' )
		{
			$sql = "INSERT INTO " . SEARCH_MATCH_TABLE . " (post_id, word_id, title_match) 
				SELECT $post_id, word_id, $title_match  

# 
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
		$title_match = ( $word_in == 'title' ) ? 1 : 0;
		$extra_match = ( $word_in == 'extra' ) ? 1 : 0; 

		if ( $match_sql != '' )
		{
			$sql = "INSERT INTO " . SEARCH_MATCH_TABLE . " (post_id, word_id, title_match, extra_match) 
				SELECT $post_id, word_id, $title_match, $extra_match


# 
#-----[ ÖFFNEN ]------------------------------------------
#  
# search.php
# 
#-----[ FINDE ]---------------------------------------------------
#
	$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : 0;

# 
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
	if( $HTTP_POST_VARS['search_fields'] == 'all' )
	{
		$search_fields = '1';
	}
	else if( $HTTP_POST_VARS['search_fields'] == 'msgonly' )
	{
		$search_fields = '0';
	}
	else if( $HTTP_POST_VARS['search_fields'] == 'extra' )
	{
		$search_fields = '2';
	}

# 
#-----[ FINDE ]---------------------------------------------------
#
							$sql = "SELECT m.post_id 
								FROM " . SEARCH_WORD_TABLE . " w, " . SEARCH_MATCH_TABLE . " m 
								WHERE w.word_text LIKE '$match_word' 
									AND m.word_id = w.word_id 
									AND w.word_common <> 1 
									$search_msg_only";
#
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
							if( $search_fields == '0' )
							{
								$search_match = 'w.word_text LIKE \''. $match_word .'\' AND m.title_match = 0 AND m.extra_match = 0';
							}
							else if( $search_fields == '1' )
							{
								$search_match = 'w.word_text LIKE \''. $match_word .'\'';
							}
							else if( $search_fields == '2' )
							{
								$search_match = 'w.word_text LIKE \''. $match_word .'\' AND m.title_match = 0 AND m.extra_match = 1';
							} 

							$sql = "SELECT m.post_id
								FROM ". SEARCH_WORD_TABLE ." w, ". SEARCH_MATCH_TABLE ." m
								WHERE ". $search_match ." AND m.word_id = w.word_id AND w.word_common <> 1";

# 
#-----[ FINDE ]---------------------------------------------------
#
							$search_msg_only = ( $search_fields ) ? "OR post_subject LIKE '$match_word'" : '';
							$sql = "SELECT post_id
								FROM " . POSTS_TEXT_TABLE . "
								WHERE post_text LIKE '$match_word'
								$search_msg_only";

# 
#-----[ MIT FOLGENDEM ERSETZEN ]---------------------------------------------------
#
							if( $search_fields == '0' )
							{
								$search_match = 'post_text LIKE \''. $match_word .'\'';
							}
							else if( $search_fields == '1' )
							{
								$search_match = 'post_text LIKE \''. $match_word .'\' OR post_subject LIKE \''. $match_word .'\'';
							}
							else if( $search_fields == '2' )
							{
								$search_match = 'post_text LIKE \''. $match_word .'\' OR post_extra LIKE \''. $match_word .'\'';
							}
							$sql = "SELECT post_id FROM ". POSTS_TEXT_TABLE ." WHERE ". $search_match;

# 
#-----[ FINDE ]---------------------------------------------------
#
								$message = preg_replace($highlight_match, '<span style="color:#' . $theme['fontcolor3'] . '"><b>\1</b></span>', $message);
# 
#-----[ DARUNTER EINFÜGEN (oberhalb der abschliessenden Klammer) ]---------------------------------------------------
#
								$post_extra = preg_replace($highlight_match, '<span style="color:#' . $theme['fontcolor3'] . '"><b>\1</b></span>', $post_extra);

# 
#-----[ FINDE ]---------------------------------------------------
#
	'L_SEARCH_MESSAGE_ONLY' => $lang['Search_msg_only'], 

# 
#-----[ DARUNTER EINFÜGEN ]---------------------------------------------------
#
	'L_SEARCH_EXTRA_ONLY' => $lang['Search_extra_only'], 


# 
#-----[ ÖFFNEN ]------------------------------------------
#  
# viewtopic.php
# 
#-----[ FINDE ]---------------------------------------------------
#
		$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $highlight_match . ")\b#i', '<span style=\"color:#" . $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')", '>' . $message . '<'), 1, -1));

# 
#-----[ DARUNTER EINFÜGEN ]---------------------------------------------------
#
		$post_extra = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $highlight_match . ")\b#i', '<span style=\"color:#" . $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')", '>' . $post_extra . '<'), 1, -1));


# 
#-----[ ÖFFNEN ]------------------------------------------
#  
# templates/xxx/search_body.tpl
# 
#-----[ FINDE ]---------------------------------------------------
#
{L_SEARCH_MESSAGE_ONLY}

# 
#-----[ DANACH EINFÜGEN (vor </span>) ]---------------------------------------------------
#
<br /><input type="radio" name="search_fields" value="extra" /> {L_SEARCH_EXTRA_ONLY}

#########################################################################################
#########################################################################################
#########################################################################################
siebenschlaefer
Mitglied
Beiträge: 221
Registriert: 22.01.2003 19:36
Wohnort: md

Beitrag von siebenschlaefer »

über ein halbes jahr ist vergangen, ich wollte nochmal nachfragen ^^
Antworten

Zurück zu „phpBB 2.0: Mod Suche/Anfragen“