X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/0d840c8d4ee6ea233ed32350e1d633402c80e46a..02af0a2c87e2aaac5d51a06d59cfa0f51f45fc2d:/nominatim/tools/convert_sqlite.py diff --git a/nominatim/tools/convert_sqlite.py b/nominatim/tools/convert_sqlite.py index d9e39ba3..3e584710 100644 --- a/nominatim/tools/convert_sqlite.py +++ b/nominatim/tools/convert_sqlite.py @@ -28,7 +28,8 @@ async def convert(project_dir: Path, outfile: Path, options: Set[str]) -> None: try: outapi = napi.NominatimAPIAsync(project_dir, - {'NOMINATIM_DATABASE_DSN': f"sqlite:dbname={outfile}"}) + {'NOMINATIM_DATABASE_DSN': f"sqlite:dbname={outfile}", + 'NOMINATIM_DATABASE_RW': '1'}) try: async with api.begin() as src, outapi.begin() as dest: @@ -205,15 +206,15 @@ class SqliteWriter: async def create_search_index(self) -> None: """ Create the tables and indexes needed for word lookup. """ + LOG.warning("Creating reverse search table") + rsn = sa.Table('reverse_search_name', self.dest.t.meta, + sa.Column('word', sa.Integer()), + sa.Column('column', sa.Text()), + sa.Column('places', IntArray)) + await self.dest.connection.run_sync(rsn.create) + tsrc = self.src.t.search_name for column in ('name_vector', 'nameaddress_vector'): - table_name = f'reverse_search_{column}' - LOG.warning("Creating reverse search %s", table_name) - rsn = sa.Table(table_name, self.dest.t.meta, - sa.Column('word', sa.Integer()), - sa.Column('places', IntArray)) - await self.dest.connection.run_sync(rsn.create) - sql = sa.select(sa.func.unnest(getattr(tsrc.c, column)).label('word'), sa.func.ArrayAgg(tsrc.c.place_id).label('places'))\ .group_by('word') @@ -224,11 +225,12 @@ class SqliteWriter: for row in partition: row.places.sort() data.append({'word': row.word, + 'column': column, 'places': row.places}) await self.dest.execute(rsn.insert(), data) - await self.dest.connection.run_sync( - sa.Index(f'idx_reverse_search_{column}_word', rsn.c.word).create) + await self.dest.connection.run_sync( + sa.Index('idx_reverse_search_name_word', rsn.c.word).create) def select_from(self, table: str) -> SaSelect: