Merge pull request #3979 from jayaddison/issue-2714-prep/extract-rank-zero-specialcasing

Indexer: relocate zero-ranked-address indexing
This commit is contained in:
Sarah Hoffmann
2026-02-11 15:05:28 +01:00
committed by GitHub
2 changed files with 10 additions and 4 deletions

View File

@@ -56,7 +56,7 @@ class Indexer:
cur.execute('ANALYZE') cur.execute('ANALYZE')
while True: while True:
if await self.index_by_rank(0, 4) > 0: if await self.index_by_rank(1, 4) > 0:
_analyze() _analyze()
if await self.index_boundaries() > 100: if await self.index_boundaries() > 100:
@@ -68,6 +68,9 @@ class Indexer:
if await self.index_by_rank(26, 30) > 1000: if await self.index_by_rank(26, 30) > 1000:
_analyze() _analyze()
# Special case: rank zero depends on the previously-indexed [1..30] ranks
await self.index_by_rank(0, 0)
if await self.index_postcodes() > 100: if await self.index_postcodes() > 100:
_analyze() _analyze()
@@ -147,8 +150,11 @@ class Indexer:
total += await self._index(runners.RankRunner(rank, analyzer), total += await self._index(runners.RankRunner(rank, analyzer),
batch=batch, total_tuples=total_tuples.get(rank, 0)) batch=batch, total_tuples=total_tuples.get(rank, 0))
if maxrank == 30: # Special case: rank zero depends on ranks [1..30]
if minrank == 0:
total += await self._index(runners.RankRunner(0, analyzer)) total += await self._index(runners.RankRunner(0, analyzer))
if maxrank == 30:
total += await self._index(runners.InterpolationRunner(analyzer), batch=20) total += await self._index(runners.InterpolationRunner(analyzer), batch=20)
return total return total

View File

@@ -226,12 +226,12 @@ async def test_index_partial_with_30(test_db, threads, test_tokenizer):
idx = indexer.Indexer('dbname=test_nominatim_python_unittest', test_tokenizer, threads) idx = indexer.Indexer('dbname=test_nominatim_python_unittest', test_tokenizer, threads)
await idx.index_by_rank(28, 30) await idx.index_by_rank(28, 30)
assert test_db.placex_unindexed() == 27 assert test_db.placex_unindexed() == 28
assert test_db.osmline_unindexed() == 0 assert test_db.osmline_unindexed() == 0
assert test_db.scalar(""" assert test_db.scalar("""
SELECT count(*) FROM placex SELECT count(*) FROM placex
WHERE indexed_status = 0 AND rank_address between 1 and 27""") == 0 WHERE indexed_status = 0 AND rank_address between 0 and 27""") == 0
@pytest.mark.parametrize("threads", [1, 15]) @pytest.mark.parametrize("threads", [1, 15])