diff options
| author | Oleg Pudeyev <oleg@bsdpower.com> | 2012-11-06 11:11:27 -0500 |
|---|---|---|
| committer | Oleg Pudeyev <oleg@bsdpower.com> | 2012-11-06 11:11:27 -0500 |
| commit | 87ea50948ea53c0d1beab5b44badebeae4292d1a (patch) | |
| tree | dbc99fde4dfc62b84bae60c7e4ab5c02ddbe8a3c /phpBB/develop/create_search_index.php | |
| parent | 5b48df41685da785b082612318ebe7a8012c4149 (diff) | |
| parent | 44ff9d020fd218cbdb2f07a0d7f85a630367e3c2 (diff) | |
| download | forums-87ea50948ea53c0d1beab5b44badebeae4292d1a.tar forums-87ea50948ea53c0d1beab5b44badebeae4292d1a.tar.gz forums-87ea50948ea53c0d1beab5b44badebeae4292d1a.tar.bz2 forums-87ea50948ea53c0d1beab5b44badebeae4292d1a.tar.xz forums-87ea50948ea53c0d1beab5b44badebeae4292d1a.zip | |
Merge remote-tracking branch 'upstream/develop' into feature/prune-users
* upstream/develop: (2171 commits)
[ticket/11164] Update composer.phar
[ticket/10933] Use inheritDoc, eliminate copy pasted docblocks.
[ticket/10933] Dependency inject template context.
[ticket/10933] Expanded prose documentation for phpbb_extension_provider.
[ticket/10933] Specify empty template path for absolute includephp test.
[ticket/10933] Useful documentation for template locate function
[ticket/10933] Typo fixes
[ticket/10933] Initialize template context when template is constructed.
[ticket/11099] Mark acp_ban::display_ban_options() as static.
[ticket/11158] Require acl_u_sig for ucp signature module.
[ticket/11158] Revert old fix in PHPBB3-10186.
[ticket/11159] static public is the currently approved order.
[ticket/11157] static public is the currently approved order.
[ticket/11157] Fix remaining captcha spam.
[ticket/11157] get_captcha_types is an instance method.
[ticket/11156] Delete "Misc" tab of forum based permissions + move items
[ticket/10848] Move include up.
[ticket/11014] Fix old pagination assignment
[ticket/11018] Fix several paginations in ACP
[ticket/11014] Fix IF statements for new template pagination
...
Conflicts:
phpBB/includes/functions_user.php
Diffstat (limited to 'phpBB/develop/create_search_index.php')
| -rw-r--r-- | phpBB/develop/create_search_index.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/phpBB/develop/create_search_index.php b/phpBB/develop/create_search_index.php new file mode 100644 index 0000000000..f329b805a0 --- /dev/null +++ b/phpBB/develop/create_search_index.php @@ -0,0 +1,136 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2011 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +if (php_sapi_name() != 'cli') +{ + die("This program must be run from the command line.\n"); +} + +if ($argc < 2) +{ + echo 'Usage: php ' . basename(__FILE__) . " index_type [batch_size]\n"; + exit(1); +} + +$class_name = basename($argv[1]); + +define('IN_PHPBB', true); +$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../'; +$phpEx = substr(strrchr(__FILE__, '.'), 1); +require($phpbb_root_path . 'common.' . $phpEx); +require($phpbb_root_path . 'includes/acp/acp_search.' . $phpEx); + +$user->session_begin(); +$auth->acl($user->data); +$user->setup('acp/search'); + +$search_name = ucfirst(strtolower(str_replace('_', ' ', $class_name))); +$search_errors = array(); +$search = new $class_name($search_errors); + +$batch_size = isset($argv[2]) ? $argv[2] : 2000; + +if (method_exists($search, 'create_index')) +{ + if ($error = $search->create_index(null, '')) + { + var_dump($error); + exit(1); + } +} +else +{ + $sql = 'SELECT forum_id, enable_indexing + FROM ' . FORUMS_TABLE; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + $forums[$row['forum_id']] = (bool) $row['enable_indexing']; + } + $db->sql_freeresult($result); + + $sql = 'SELECT post_id + FROM ' . POSTS_TABLE . ' + ORDER BY post_id DESC'; + $result = $db->sql_query_limit($sql, 1); + $max_post_id = (int) $db->sql_fetchfield('post_id'); + + $post_counter = 0; + while ($post_counter <= $max_post_id) + { + $row_count = 0; + $time = time(); + + printf("Processing posts with %d <= post_id <= %d\n", + $post_counter + 1, + $post_counter + $batch_size + ); + + $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 + $batch_size); + $result = $db->sql_query($sql); + + $buffer = $db->sql_buffer_nested_transactions(); + + if ($buffer) + { + $rows = $db->sql_fetchrowset($result); + $rows[] = false; // indicate end of array for while loop below + + $db->sql_freeresult($result); + } + + $i = 0; + while ($row = ($buffer ? $rows[$i++] : $db->sql_fetchrow($result))) + { + // Indexing enabled for this forum or global announcement? + // Global announcements get indexed by default. + if (!$row['forum_id'] || !empty($forums[$row['forum_id']])) + { + ++$row_count; + + $search->index('post', + $row['post_id'], + $row['post_text'], + $row['post_subject'], + $row['poster_id'], + $row['forum_id'] + ); + + if ($row_count % 10 == 0) + { + echo '.'; + } + } + } + + $delta = (time() - $time); + $delta = $delta <= 0 ? 1 : $delta; + printf(" %d posts/sec\n", $row_count / $delta); + + if (!$buffer) + { + $db->sql_freeresult($result); + } + + $post_counter += $batch_size; + } +} + +$search->tidy(); + +add_log('admin', 'LOG_SEARCH_INDEX_CREATED', $search_name); + +echo $user->lang['SEARCH_INDEX_CREATED'] . "\n"; +echo 'Peak Memory Usage: ' . get_formatted_filesize(memory_get_peak_usage()) . "\n"; + +exit(0); |
