* @license GPL 2 (http://www.gnu.org/licenses/gpl.html) */ // Import DokuWiki constants from environment. This for example allows multiple // DokuWiki installations with symlinks. $constants = array( 'DOKU_INC', 'DOKU_PLUGIN', 'DOKU_CONF', 'DOKU_E_LEVEL', 'DOKU_REL', 'DOKU_URL', 'DOKU_BASE', 'DOKU_BASE', 'DOKU_LF', 'DOKU_TAB', 'DOKU_COOKIE', 'DOKU_SCRIPT', 'DOKU_TPL', 'DOKU_TPLINC' ); foreach($constants as $const) { if(!defined($const)) { $env_var = getenv($const); if($env_var !== false) { define($const, $env_var); } } } $ini_path = defined('DOKU_INC') ? DOKU_INC : realpath(dirname(__FILE__).'/../../../').'/'; require_once($ini_path.'inc/init.php'); require_once(DOKU_INC.'inc/common.php'); require_once(DOKU_INC.'inc/search.php'); require_once(DOKU_INC.'inc/pageutils.php'); require_once DOKU_INC.'inc/cliopts.php'; require_once(dirname(__FILE__).'/AddDocument.php'); require_once(dirname(__FILE__).'/Pageinfo.php'); // TODO: Add option for deleting index before adding // handle options $short_opts = 'hqpd'; $long_opts = array('help', 'quiet', 'progress', 'delete'); $OPTS = Doku_Cli_Opts::getOptions(__FILE__,$short_opts,$long_opts); if ( $OPTS->isError() ) { fwrite( STDERR, $OPTS->getMessage() . "\n"); _usage(); exit(1); } $solr = plugin_load("helper", "solr"); $QUIET = false; $PROGRESS = false; foreach ($OPTS->options as $key => $val) { switch ($key) { case 'd': case 'delete': $solr->solr_query('update', "stream.body=".urlencode('*:*')."&commit=true"); break; case 'h': case 'help': _usage(); exit; case 'q': case 'quiet': $QUIET = true; break; case 'p': case 'progress': $PROGESS = true; break; } } /** * Commit with n milliseconds */ define('COMMIT_WITHIN', 10000); $data = array( 'global_count' => 0, 'errors' => array() ); $opts = array(); $start = microtime(true); search($data, $conf['datadir'], 'search_solr_index', $opts, ''); if(!$QUIET) { printf("\nImported %d pages in %0.3f seconds\n", $data['global_count'], microtime(true)-$start); if(!empty($data['errors'])) { echo "\nThe following pages encountered an error while importing:\n"; foreach($data['errors'] as $err) { echo "\n{$err['id']}"; } } echo "\n"; } function search_solr_index(&$data,$base,$file,$type,$lvl,$opts) { global $QUIET, $PROGRESS, $solr; if($type=='f') { // Import each file individually to detect errors and minimize unimported docs $id = pathID($file); $info = new Solr_Pageinfo($id); $writer = new XmlWriter(); $writer->openMemory(); $doc = new Solr_AddDocument($writer); $doc->start(COMMIT_WITHIN); $doc->addPage($info->getFields()); $doc->end(); $xmldoc = $writer->outputMemory(); $result = $solr->solr_query('update', '', 'POST', $xmldoc); $xml = simplexml_load_string($result); // Check response if($xml->getName() != "response") { $data['errors'][] = array('id' => $id, 'result' => $result); if(!$QUIET) { /* echo $result; echo $xmldoc; */ } } $data['global_count']++; // Show progress dots every 100 pages if(!($data['global_count'] % 100)) { echo "."; } } return true; } function _usage() { print "Usage: index_all.php Update Solr index for all pages.. OPTIONS -h, --help show this help and exit -q, --quiet don't produce any output -p, --progress show progress -d, --delete Delete all pages form index before updating "; }