X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/6a7e0d652b1d40a397e1c1386d500101796676c4..6f15306766b6681e708cd2152d37d7c33681d2b9:/nominatim/clicmd/index.py diff --git a/nominatim/clicmd/index.py b/nominatim/clicmd/index.py index ca3f9dee..73258be2 100644 --- a/nominatim/clicmd/index.py +++ b/nominatim/clicmd/index.py @@ -1,28 +1,31 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# This file is part of Nominatim. (https://nominatim.org) +# +# Copyright (C) 2022 by the Nominatim developer community. +# For a full list of authors see the git log. """ Implementation of the 'index' subcommand. """ -import os +import psutil -from ..db import status -from ..db.connection import connect +from nominatim.db import status +from nominatim.db.connection import connect # Do not repeat documentation of subcommand classes. # pylint: disable=C0111 # Using non-top-level imports to avoid eventually unused imports. # pylint: disable=E0012,C0415 -def _num_system_cpus(): - try: - cpus = len(os.sched_getaffinity(0)) - except NotImplementedError: - cpus = None - - return cpus or os.cpu_count() - class UpdateIndex: """\ Reindex all new and modified data. + + Indexing is the process of computing the address and search terms for + the places in the database. Every time data is added or changed, indexing + needs to be run. Imports and replication updates automatically take care + of indexing. For other cases, this function allows to run indexing manually. """ @staticmethod @@ -40,9 +43,12 @@ class UpdateIndex: @staticmethod def run(args): from ..indexer.indexer import Indexer + from ..tokenizer import factory as tokenizer_factory + + tokenizer = tokenizer_factory.get_tokenizer_for_db(args.config) - indexer = Indexer(args.config.get_libpq_dsn(), - args.threads or _num_system_cpus() or 1) + indexer = Indexer(args.config.get_libpq_dsn(), tokenizer, + args.threads or psutil.cpu_count() or 1) if not args.no_boundaries: indexer.index_boundaries(args.minrank, args.maxrank) @@ -51,8 +57,7 @@ class UpdateIndex: if not args.no_boundaries and not args.boundaries_only \ and args.minrank == 0 and args.maxrank == 30: - conn = connect(args.config.get_libpq_dsn()) - status.set_indexed(conn, True) - conn.close() + with connect(args.config.get_libpq_dsn()) as conn: + status.set_indexed(conn, True) return 0