diff options
| author | Nils Adermann <naderman@naderman.de> | 2007-03-04 16:05:17 +0000 |
|---|---|---|
| committer | Nils Adermann <naderman@naderman.de> | 2007-03-04 16:05:17 +0000 |
| commit | ac21b7d47b4c8783a41ba4dbf8d26971c252c6d1 (patch) | |
| tree | 8110ad6a167a84c7c6d0a849ec9fa645ed5b1178 /phpBB/includes | |
| parent | 567b01302b735c03e596be1b1b7d01261084c62b (diff) | |
| download | forums-ac21b7d47b4c8783a41ba4dbf8d26971c252c6d1.tar forums-ac21b7d47b4c8783a41ba4dbf8d26971c252c6d1.tar.gz forums-ac21b7d47b4c8783a41ba4dbf8d26971c252c6d1.tar.bz2 forums-ac21b7d47b4c8783a41ba4dbf8d26971c252c6d1.tar.xz forums-ac21b7d47b4c8783a41ba4dbf8d26971c252c6d1.zip | |
- added a UNIQUE index on the wordmatch table
- some modifications of search indexing which might improve the speed and hopefully fixes [Bug #8352]
- added logging to search indexing [Bug #8384]
git-svn-id: file:///svn/phpbb/trunk@7119 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes')
| -rw-r--r-- | phpBB/includes/acp/acp_search.php | 54 | ||||
| -rw-r--r-- | phpBB/includes/functions.php | 6 | ||||
| -rwxr-xr-x | phpBB/includes/search/fulltext_native.php | 6 |
3 files changed, 40 insertions, 26 deletions
diff --git a/phpBB/includes/acp/acp_search.php b/phpBB/includes/acp/acp_search.php index ab81721311..2353150c03 100644 --- a/phpBB/includes/acp/acp_search.php +++ b/phpBB/includes/acp/acp_search.php @@ -9,16 +9,6 @@ */ /** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} -// make sure, a start time is saved -still_on_time(); - -/** * @package acp */ class acp_search @@ -27,7 +17,7 @@ class acp_search var $state; var $search; var $max_post_id; - var $batch_size = 1000; + var $batch_size = 100; function main($id, $mode) { @@ -260,6 +250,7 @@ class acp_search { trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING); } + $name = ucfirst(strtolower(str_replace('_', ' ', $this->state[0]))); $action = &$this->state[1]; @@ -284,12 +275,15 @@ class acp_search } else { + $starttime = explode(' ', microtime()); + $starttime = $starttime[1] + $starttime[0]; + $row_count = 0; while (still_on_time() && $post_counter <= $this->max_post_id) { $sql = 'SELECT post_id, poster_id, forum_id FROM ' . POSTS_TABLE . ' WHERE post_id >= ' . (int) ($post_counter + 1) . ' - AND post_id < ' . (int) ($post_counter + $this->batch_size); + AND post_id <= ' . (int) ($post_counter + $this->batch_size); $result = $db->sql_query($sql); $ids = $posters = $forum_ids = array(); @@ -300,6 +294,7 @@ class acp_search $forum_ids[] = $row['forum_id']; } $db->sql_freeresult($result); + $row_count += sizeof($ids); if (sizeof($ids)) { @@ -307,15 +302,17 @@ class acp_search } $post_counter += $this->batch_size; - - // save the current state - $this->save_state(); } + // save the current state + $this->save_state(); if ($post_counter <= $this->max_post_id) { + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + $rows_per_second = $row_count / $totaltime; meta_refresh(1, $this->u_action . '&action=delete&skip_rows=' . $post_counter); - trigger_error(sprintf($user->lang['SEARCH_INDEX_DELETE_REDIRECT'], $post_counter)); + trigger_error(sprintf($user->lang['SEARCH_INDEX_DELETE_REDIRECT'], $post_counter, $row_count, $rows_per_second)); } } @@ -324,6 +321,7 @@ class acp_search $this->state = array(''); $this->save_state(); + add_log('admin', 'LOG_SEARCH_INDEX_REMOVED', $name); trigger_error($user->lang['SEARCH_INDEX_REMOVED'] . adm_back_link($this->u_action) . $this->close_popup_js()); break; @@ -350,12 +348,15 @@ class acp_search } $db->sql_freeresult($result); + $starttime = explode(' ', microtime()); + $starttime = $starttime[1] + $starttime[0]; + $row_count = 0; while (still_on_time() && $post_counter <= $this->max_post_id) { $sql = 'SELECT post_id, post_subject, post_text, poster_id, forum_id FROM ' . POSTS_TABLE . ' WHERE post_id >= ' . (int) ($post_counter + 1) . ' - AND post_id < ' . (int) ($post_counter + $this->batch_size); + AND post_id <= ' . (int) ($post_counter + $this->batch_size); $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) @@ -366,19 +367,29 @@ class acp_search { $this->search->index('post', $row['post_id'], $row['post_text'], $row['post_subject'], $row['poster_id'], $row['forum_id']); } + $row_count++; } $db->sql_freeresult($result); $post_counter += $this->batch_size; - - // save the current state - $this->save_state(); } + // save the current state + $this->save_state(); + + // pretend the number of posts was as big as the number of ids we indexed so far + // just an estimation as it includes deleted posts + $num_posts = $config['num_posts']; + $config['num_posts'] = min($config['num_posts'], $post_counter); + $this->search->tidy(); + $config['num_posts'] = $num_posts; if ($post_counter <= $this->max_post_id) { + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + $rows_per_second = $row_count / $totaltime; meta_refresh(1, $this->u_action . '&action=create&skip_rows=' . $post_counter); - trigger_error(sprintf($user->lang['SEARCH_INDEX_CREATE_REDIRECT'], $post_counter)); + trigger_error(sprintf($user->lang['SEARCH_INDEX_CREATE_REDIRECT'], $post_counter, $row_count, $rows_per_second)); } } @@ -387,6 +398,7 @@ class acp_search $this->state = array(''); $this->save_state(); + add_log('admin', 'LOG_SEARCH_INDEX_CREATED', $name); trigger_error($user->lang['SEARCH_INDEX_CREATED'] . adm_back_link($this->u_action) . $this->close_popup_js()); break; } diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 04a2e20dce..2e8c87c04e 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -180,7 +180,7 @@ function unique_id($extra = 'c') * @return bool Either true if the maximum execution time is nearly reached, or false * if some time is still left. */ -function still_on_time() +function still_on_time($extra_time = 15) { static $max_execution_time, $start_time; @@ -194,10 +194,10 @@ function still_on_time() // If zero, then set to something higher to not let the user catch the ten seconds barrier. if ($max_execution_time === 0) { - $max_execution_time = 65; + $max_execution_time = 50 + $extra_time; } - $max_execution_time = min(max(10, ($max_execution_time - 15)), 50); + $max_execution_time = min(max(10, ($max_execution_time - $extra_time)), 50); // For debugging purposes // $max_execution_time = 10; diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index 5ff0c3c566..2d08a3020b 100755 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -1110,7 +1110,6 @@ class fulltext_native extends search_backend $word_ids[$row['word_text']] = $row['word_id']; } $db->sql_freeresult($result); - $new_words = array_diff($unique_add_words, array_keys($word_ids)); if (sizeof($new_words)) @@ -1121,8 +1120,9 @@ class fulltext_native extends search_backend { $sql_ary[] = array('word_text' => $word); } - + $db->return_on_error = true; $db->sql_multi_insert(SEARCH_WORDLIST_TABLE, $sql_ary); + $db->return_on_error = false; } unset($new_words, $sql_ary); } @@ -1149,6 +1149,7 @@ class fulltext_native extends search_backend } } + $db->return_on_error = true; foreach ($words['add'] as $word_in => $word_ary) { $title_match = ($word_in == 'title') ? 1 : 0; @@ -1162,6 +1163,7 @@ class fulltext_native extends search_backend $db->sql_query($sql); } } + $db->return_on_error = false; // destroy cached search results containing any of the words removed or added $this->destroy_cache(array_unique(array_merge($words['add']['post'], $words['add']['title'], $words['del']['post'], $words['del']['title'])), array($poster_id)); |
