info('Index ranks 0 - 4');
$oCmd = (clone $oBaseCmd)->addParams('--maxrank', 4);
echo $oCmd->escapedCmd();
-
+
$iStatus = $oCmd->run();
if ($iStatus != 0) {
fail('error status ' . $iStatus . ' running nominatim!');
}
if (!$bIndexNoanalyse) $this->pgsqlRunScript('ANALYSE');
+ info('Index administrative boundaries');
+ $oCmd = (clone $oBaseCmd)->addParams('-b');
+ $iStatus = $oCmd->run();
+ if ($iStatus != 0) {
+ fail('error status ' . $iStatus . ' running nominatim!');
+ }
+
info('Index ranks 5 - 25');
$oCmd = (clone $oBaseCmd)->addParams('--minrank', 5, '--maxrank', 25);
$iStatus = $oCmd->run();
if ($iStatus != 0) {
fail('error status ' . $iStatus . ' running nominatim!');
}
+
if (!$bIndexNoanalyse) $this->pgsqlRunScript('ANALYSE');
info('Index ranks 26 - 30');
SET indexed_status = 0 WHERE place_id IN ({})"""\
.format(','.join((str(i) for i in ids)))
+class BoundaryRunner(object):
+ """ Returns SQL commands for indexing the administrative boundaries
+ by partition.
+ """
+
+ def name(self):
+ return "boundaries"
+
+ def sql_count_objects(self):
+ return """SELECT count(*) FROM placex
+ WHERE indexed_status > 0
+ AND rank_search < 26
+ AND class = 'boundary' and type = 'administrative'"""
+
+ def sql_get_objects(self):
+ return """SELECT place_id FROM placex
+ WHERE indexed_status > 0 and rank_search < 26
+ and class = 'boundary' and type = 'administrative'
+ ORDER BY partition, admin_level"""
+
+ def sql_index_place(self, ids):
+ return "UPDATE placex SET indexed_status = 0 WHERE place_id IN ({})"\
+ .format(','.join((str(i) for i in ids)))
class Indexer(object):
""" Main indexing routine.
self.conn = make_connection(options)
self.threads = [DBConnection(options) for i in range(options.threads)]
- def run(self):
- """ Run indexing over the entire database.
+ def index_boundaries(self):
+ log.warning("Starting indexing boundaries using {} threads".format(
+ len(self.threads)))
+
+ self.index(BoundaryRunner())
+
+ def index_by_rank(self):
+ """ Run classic indexing by rank.
"""
log.warning("Starting indexing rank ({} to {}) using {} threads".format(
self.minrank, self.maxrank, len(self.threads)))
p.add_argument('-P', '--port',
dest='port', action='store',
help='PostgreSQL server port')
+ p.add_argument('-b', '--boundary-only',
+ dest='boundary_only', action='store_true',
+ help='Only index administrative boundaries (ignores min/maxrank).')
p.add_argument('-r', '--minrank',
dest='minrank', type=int, metavar='RANK', default=0,
help='Minimum/starting rank.')
password = getpass.getpass("Database password: ")
options.password = password
- Indexer(options).run()
+ if options.boundary_only:
+ Indexer(options).index_boundaries()
+ else:
+ Indexer(options).index_by_rank()
if ($aResult['index']) {
$oCmd = (clone $oIndexCmd)
- ->addParams('--minrank', $aResult['index-rank']);
+ ->addParams('--minrank', $aResult['index-rank'], '-b');
+ $oCmd->run();
- // echo $oCmd->escapedCmd()."\n";
+ $oCmd = (clone $oIndexCmd)
+ ->addParams('--minrank', $aResult['index-rank']);
$oCmd->run();
$oDB->exec('update import_status set indexed = true');
// Index file
if (!$aResult['no-index']) {
- $oThisIndexCmd = clone($oIndexCmd);
$fCMDStartTime = time();
+ $oThisIndexCmd = clone($oIndexCmd);
+ $oThisIndexCmd->addParams('-b');
+ echo $oThisIndexCmd->escapedCmd()."\n";
+ $iErrorLevel = $oThisIndexCmd->run();
+ if ($iErrorLevel) {
+ echo "Error: $iErrorLevel\n";
+ exit($iErrorLevel);
+ }
+
+ $oThisIndexCmd = clone($oIndexCmd);
echo $oThisIndexCmd->escapedCmd()."\n";
$iErrorLevel = $oThisIndexCmd->run();
if ($iErrorLevel) {