X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/4d16677d2ee4e57cef44d7a208b15b390d5994f4..28ad09a20aa81c3ac1f5c50db4e9954057b4142c:/utils/setup.php?ds=sidebyside diff --git a/utils/setup.php b/utils/setup.php index 6ef22b2d..871f6e04 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -30,6 +30,7 @@ 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-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'), ); getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true); @@ -81,8 +82,12 @@ $oDB =& getDB(); passthru('createlang plpgsql '.$aDSNInfo['database']); - pgsqlRunScriptFile(CONST_Path_Postgresql_Contrib.'/_int.sql'); - pgsqlRunScriptFile(CONST_Path_Postgresql_Contrib.'/hstore.sql'); + $pgver = (float) CONST_Postgresql_Version; + if ($pgver < 9.1) { + pgsqlRunScriptFile(CONST_Path_Postgresql_Contrib.'/hstore.sql'); + } else { + pgsqlRunScript('CREATE EXTENSION hstore'); + } pgsqlRunScriptFile(CONST_Path_Postgresql_Postgis.'/postgis.sql'); pgsqlRunScriptFile(CONST_Path_Postgresql_Postgis.'/spatial_ref_sys.sql'); pgsqlRunScriptFile(CONST_BasePath.'/data/country_name.sql'); @@ -100,10 +105,9 @@ echo "Import\n"; $bDidSomething = true; - $osm2pgsql = CONST_BasePath.'/osm2pgsql/osm2pgsql'; - if (!file_exists($osm2pgsql)) $osm2pgsql = trim(`which osm2pgsql`); + $osm2pgsql = CONST_Osm2pgsql_Binary; if (!file_exists($osm2pgsql)) fail("please download and build osm2pgsql"); - passthru($osm2pgsql.' -lsc -O gazetteer -C 10000 --hstore -d '.$aDSNInfo['database'].' '.$aCMDResult['osm-file']); + passthru($osm2pgsql.' --tablespace-slim-index data --tablespace-main-index ssd --tablespace-main-data data --tablespace-slim-data data -lsc -O gazetteer -C 12000 --hstore -d '.$aDSNInfo['database'].' '.$aCMDResult['osm-file']); $oDB =& getDB(); $x = $oDB->getRow('select * from place limit 1'); @@ -237,6 +241,8 @@ echo '.'; } echo "\n"; + echo "Reanalysing database...\n"; + pgsqlRunScript('ANALYSE'); } if ($aCMDResult['create-roads']) @@ -278,7 +284,7 @@ $aDBInstances[$i] =& getDB(true); } - foreach(glob(CONST_BasePath.'/data/tiger2009/*.sql') as $sFile) + foreach(glob(CONST_BasePath.'/data/tiger2011/*.sql') as $sFile) { echo $sFile.': '; $hFile = fopen($sFile, "r"); @@ -340,13 +346,13 @@ if (!pg_query($oDB->connection, $sSQL)) fail(pg_last_error($oDB->connection)); } - if (($aCMDResult['osmosis-init'] || $aCMDResult['all']) && isset($aCMDResult['osmosis-init-date'])) + if ($aCMDResult['osmosis-init'] && isset($aCMDResult['osmosis-init-date'])) { $bDidSomething = true; - if (!file_exists(CONST_BasePath.'/osmosis-0.38/bin/osmosis')) fail("please download osmosis"); + if (!file_exists(CONST_Osmosis_Binary)) fail("please download osmosis"); if (file_exists(CONST_BasePath.'/settings/configuration.txt')) echo "settings/configuration.txt already exists\n"; - else passthru(CONST_BasePath.'/osmosis-0.38/bin/osmosis --read-replication-interval-init '.CONST_BasePath.'/settings'); + else passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings'); $sDate = $aCMDResult['osmosis-init-date']; $sURL = 'http://toolserver.org/~mazder/replicate-sequences/?'.$sDate; @@ -361,7 +367,40 @@ $bDidSomething = true; $sOutputFile = ''; if (isset($aCMDResult['index-output'])) $sOutputFile = ' -F '.$aCMDResult['index-output']; - passthru(CONST_BasePath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -t '.$iInstances.$sOutputFile); + $sBaseCmd = CONST_BasePath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -t '.$iInstances.$sOutputFile; + passthru($sBaseCmd.' -R 4'); + pgsqlRunScript('ANALYSE'); + passthru($sBaseCmd.' -r 5 -R 25'); + pgsqlRunScript('ANALYSE'); + passthru($sBaseCmd.' -r 26'); + } + + if ($aCMDResult['create-search-indices'] || $aCMDResult['all']) + { + echo "Search indices\n"; + $bDidSomething = true; + $oDB =& getDB(); + $sSQL = 'select partition from country_name order by country_code'; + $aPartitions = $oDB->getCol($sSQL); + if (PEAR::isError($aPartitions)) + { + fail($aPartitions->getMessage()); + } + $aPartitions[] = 0; + + $sTemplate = file_get_contents(CONST_BasePath.'/sql/indices.src.sql'); + preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER); + foreach($aMatches as $aMatch) + { + $sResult = ''; + foreach($aPartitions as $sPartitionName) + { + $sResult .= str_replace('-partition-', $sPartitionName, $aMatch[1]); + } + $sTemplate = str_replace($aMatch[0], $sResult, $sTemplate); + } + + pgsqlRunScript($sTemplate); } if (isset($aCMDResult['create-website']))