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/acp/acp_search.php | |
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/acp/acp_search.php')
-rw-r--r-- | phpBB/includes/acp/acp_search.php | 54 |
1 files changed, 33 insertions, 21 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; } |