fix(geocoding): Pelias config for DACH-only import + single-country filter

After importing 22M OSM objects for the DACH extract:
- Disable adminLookup (no WOF data needed for address search)
- Configure leveldb path inside the data volume
- Specify planet-latest.osm.pbf as the import filename
- Convert libpostal service config from string to object form
- Drop boundary.country default — Pelias only accepts a single
  country value, and our index only contains DACH data anyway

Verified forward + reverse geocoding work end-to-end for Konstanz
test queries via the mana-geocoding wrapper on port 3018.

Known limitation: OSM category/type (amenity:restaurant etc.) is
not yet populated in Pelias responses — will require whitelisting
those tags in the importer config and re-running the import.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-11 04:58:55 +02:00
parent 68c59c84b1
commit 1943a1d13c
2 changed files with 30 additions and 7 deletions

View file

@ -10,13 +10,25 @@
},
"api": {
"services": {
"libpostal": "http://libpostal:4400"
"libpostal": {
"url": "http://libpostal:4400"
},
"placeholder": {
"url": "http://placeholder:4100"
},
"pip": {
"url": "http://pip:4200"
},
"interpolation": {
"url": "http://interpolation:4300"
}
},
"defaultParameters": {
"boundary.country": ["DEU", "AUT", "CHE"]
}
"defaultParameters": {}
},
"imports": {
"adminLookup": {
"enabled": false
},
"openstreetmap": {
"download": [
{
@ -24,9 +36,19 @@
}
],
"datapath": "/data/openstreetmap",
"leveldbpath": "/tmp/leveldb",
"leveldbpath": "/data/leveldb",
"importVenues": true,
"importAddresses": true
"importAddresses": true,
"adminLookup": false,
"useAdminHierarchyLabels": false,
"leveldb": {
"cacheSize": 256
},
"import": [
{
"filename": "planet-latest.osm.pbf"
}
]
},
"polylines": {
"datapath": "/data/polylines",

View file

@ -65,11 +65,12 @@ export function createGeocodeRoutes(config: Config) {
return c.json({ results: cached, cached: true });
}
// Note: we don't set boundary.country — the Pelias index only
// contains DACH data, so everything is implicitly DE/AT/CH.
const params = new URLSearchParams({
text: q.trim(),
size: String(limit),
lang,
'boundary.country': 'DEU,AUT,CHE',
});
// Bias results towards a focus point (user's current location)