X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/0ab9c90708d574847852d33b75e9da34da9f9d3a..1cb55c6e318cb86cd1d44463eff4b951496134c0:/utils/setup.php?ds=sidebyside diff --git a/utils/setup.php b/utils/setup.php index 81ed3512..4de5953f 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -20,17 +20,21 @@ array('import-data', '', 0, 1, 0, 0, 'bool', 'Import a osm file'), array('osm2pgsql-cache', '', 0, 1, 1, 1, 'int', 'Cache size used by osm2pgsql'), array('create-functions', '', 0, 1, 0, 0, 'bool', 'Create functions'), + array('enable-diff-updates', '', 0, 1, 0, 0, 'bool', 'Turn on the code required to make diff updates work'), + array('enable-debug-statements', '', 0, 1, 0, 0, 'bool', 'Include debug warning statements in pgsql commands'), array('create-minimal-tables', '', 0, 1, 0, 0, 'bool', 'Create minimal main tables'), array('create-tables', '', 0, 1, 0, 0, 'bool', 'Create main tables'), array('create-partitions', '', 0, 1, 0, 0, 'bool', 'Create required partition tables and triggers'), array('import-wikipedia-articles', '', 0, 1, 0, 0, 'bool', 'Import wikipedia article dump'), array('load-data', '', 0, 1, 0, 0, 'bool', 'Copy data to live tables from import table'), + array('disable-token-precalc', '', 0, 1, 0, 0, 'bool', 'Disable name precalculation (EXPERT)'), array('import-tiger-data', '', 0, 1, 0, 0, 'bool', 'Import tiger data (not included in \'all\')'), array('calculate-postcodes', '', 0, 1, 0, 0, 'bool', 'Calculate postcode centroids'), array('create-roads', '', 0, 1, 0, 0, 'bool', 'Calculate postcode centroids'), array('osmosis-init', '', 0, 1, 0, 0, 'bool', 'Generate default osmosis configuration'), array('osmosis-init-date', '', 0, 1, 1, 1, 'string', 'Generate default osmosis configuration'), array('index', '', 0, 1, 0, 0, 'bool', 'Index the data'), + array('index-noanalyse', '', 0, 1, 0, 0, 'bool', 'Do not perform analyse opertions during index (EXPERT)'), array('index-output', '', 0, 1, 1, 1, 'string', 'File to dump index information to'), array('create-search-indices', '', 0, 1, 0, 0, 'bool', 'Create additional indices required for search and update'), array('create-website', '', 0, 1, 1, 1, 'realpath', 'Create symlinks to setup web directory'), @@ -117,7 +121,11 @@ $bDidSomething = true; $osm2pgsql = CONST_Osm2pgsql_Binary; - if (!file_exists($osm2pgsql)) fail("please download and build osm2pgsql"); + if (!file_exists($osm2pgsql)) + { + echo "Please download and build osm2pgsql.\nIf it is already installed, check the path in your local settings (settings/local.php) file.\n"; + fail("osm2pgsql not found in '$osm2pgsql'"); + } $osm2pgsql .= ' -lsc -O gazetteer --hstore'; $osm2pgsql .= ' -C '.$iCacheMemory; $osm2pgsql .= ' -d '.$aDSNInfo['database'].' '.$aCMDResult['osm-file']; @@ -137,7 +145,9 @@ $bDidSomething = true; if (!file_exists(CONST_BasePath.'/module/nominatim.so')) fail("nominatim module not built"); $sTemplate = file_get_contents(CONST_BasePath.'/sql/functions.sql'); - $sTemplate = str_replace('{modulepath}',CONST_BasePath.'/module', $sTemplate); + $sTemplate = str_replace('{modulepath}', CONST_BasePath.'/module', $sTemplate); + if ($aCMDResult['enable-diff-updates']) $sTemplate = str_replace('RETURN NEW; -- @DIFFUPDATES@', '--', $sTemplate); + if ($aCMDResult['enable-debug-statements']) $sTemplate = str_replace('--DEBUG:', '', $sTemplate); pgsqlRunScript($sTemplate); } @@ -264,6 +274,30 @@ if (!pg_query($oDB->connection, 'CREATE SEQUENCE seq_place start 100000')) fail(pg_last_error($oDB->connection)); echo '.'; + $sSQL = 'select partition from country_name order by country_code'; + $aPartitions = $oDB->getCol($sSQL); + if (PEAR::isError($aPartitions)) + { + fail($aPartitions->getMessage()); + } + $aPartitions[] = 0; + foreach($aPartitions as $sPartition) + { + if (!pg_query($oDB->connection, 'TRUNCATE location_road_'.$sPartition)) fail(pg_last_error($oDB->connection)); + echo '.'; + } + + // pre-create the word list + if (!$aCMDResult['disable-token-precalc']) + { + if (!pg_query($oDB->connection, 'select count(make_keywords(v)) from (select distinct svals(name) as v from place) as w where v is not null;')) fail(pg_last_error($oDB->connection)); + echo '.'; + if (!pg_query($oDB->connection, 'select count(make_keywords(v)) from (select distinct postcode as v from place) as w where v is not null;')) fail(pg_last_error($oDB->connection)); + echo '.'; + if (!pg_query($oDB->connection, 'select count(getorcreate_housenumber_id(v)) from (select distinct housenumber as v from place where housenumber is not null) as w;')) fail(pg_last_error($oDB->connection)); + echo '.'; + } + $aDBInstances = array(); for($i = 0; $i < $iInstances; $i++) { @@ -424,9 +458,9 @@ if (isset($aCMDResult['index-output'])) $sOutputFile = ' -F '.$aCMDResult['index-output']; $sBaseCmd = CONST_BasePath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -t '.$iInstances.$sOutputFile; passthru($sBaseCmd.' -R 4'); - pgsqlRunScript('ANALYSE'); + if (!$aCMDResult['index-noanalyse']) pgsqlRunScript('ANALYSE'); passthru($sBaseCmd.' -r 5 -R 25'); - pgsqlRunScript('ANALYSE'); + if (!$aCMDResult['index-noanalyse']) pgsqlRunScript('ANALYSE'); passthru($sBaseCmd.' -r 26'); } @@ -462,7 +496,12 @@ { $bDidSomething = true; $sTargetDir = $aCMDResult['create-website']; - if (!is_dir($sTargetDir)) fail('please specify a directory to setup'); + if (!is_dir($sTargetDir)) + { + echo "You must create the website directory before calling this function.\n"; + fail("Target directory does not exist."); + } + @symlink(CONST_BasePath.'/website/details.php', $sTargetDir.'/details.php'); @symlink(CONST_BasePath.'/website/reverse.php', $sTargetDir.'/reverse.php'); @symlink(CONST_BasePath.'/website/search.php', $sTargetDir.'/search.php');