Airport Search — Interactive Test Page
Kunden-Simulation
Experten-Testbereich (alle Parameter)
JetApp Airport Search — Feature-Beschreibung & Testszenarien
Zielgruppe: Marketing-Team, QA, Produktmanagement
Stand: Oktober 2026 | Endpunkt:GET /api/v2/airports/search
Feature-Beschreibung
Was ist die Airport Search?
Die JetApp Airport Search ist eine Echtzeit-Flughafensuche für alle Buchungsformulare und Touchpoints im Frontend. Sie löst die bisherige Legacy-Suche ab (der Legacy-Endpunkt ist deprecated, Abschaltung zum 30.06.2027) und liefert im Schnitt < 50 ms Antwortzeiten — auch bei komplexen Anfragen mit Tippfehlern, fremdsprachigen Eingaben oder Regionalbezeichnungen.
Highlights auf einen Blick
| Feature | Details |
|---|---|
| ⚡ Blitzschnell | < 50 ms Antwortzeit durch Meilisearch-Index (kein DB-Hit zur Laufzeit) |
| 🌍 9 Sprachen | Deutsch, Englisch, Französisch, Italienisch, Spanisch, Polnisch, Chinesisch, Arabisch, Russisch |
| ✏️ Tippfehler-tolerant | Ab 4 Zeichen: 1 Tippfehler erlaubt; ab 8 Zeichen: 2 Tippfehler erlaubt |
| 🗺️ Geo-Fallback | Kein Flughafen für den Suchbegriff? → Nächstgelegene Airports per Entfernungs-Decay-Ranking (Radius 150 km um den Treffer bzw. Ort) |
| 🏷️ Spitznamen & Umgangssprache | „Malle", „Gstaad", „Lake Como" → korrekte Flughäfen |
| 🧭 Teilbegriffe bei Reisezielen | Ab 3 Zeichen: „French Rivi" → French Riviera, „Sardini" → Sardinien; vollständige Namen haben immer Vorrang |
| 🛫 Kuratierte Alternativen | Feste, sinnvolle Weiterreise-Plätze: München → Oberpfaffenhofen, Mailand → Linate/Malpensa/Bergamo, EuroAirport → Freiburg, Palma → Son Bonet; Hinweis: keine Eignungszusage für jedes Flugzeug |
| 🏝️ Inselregel | Andere Inseln gelten nicht als normale Umgebungsalternative (Palma zeigt kein Ibiza, Nizza kein Korsika) |
| ⚖️ Mehrdeutige Begriffe | Bei Kollisionen (z. B. „Sylt" = Westerland vs. Code SYLT/Lethem) steht der für Charterkunden relevante Flughafen zuerst, die zweite Bedeutung bleibt wählbar |
| 🔤 Synonyme | „Cologne" = „Köln" = „Koeln" = „CGN" = „EDDK" |
| 🌐 Multi-Channel | Länderspezifische Vorschläge je Channel (DE, AT, CH, FR, IT, GB, ES) |
| 📍 Koordinaten-Suche | Nächstgelegene Flughäfen via lat/lng-Parameter |
| 📊 Relevanz-Ranking | Priorisierung nach Startbahnlänge, Buchungsfrequenz, Is-Top-Flag |
| 🔄 Zero-Downtime-Import | Wöchentlicher Datenupdate ohne Suchunterbrechung |
Unterstützte Sucharten
1. Freitextsuche (Name, Stadt, Land)
Nutzer tippt einen beliebigen Namen — in jeder der 9 Sprachen — und bekommt passende Flughäfen zurück.
Beispiele:
Munich→ EDDM (Munich International Airport)Monaco→ LNMC (Monaco Héliport) oder LFMN (Nice Côte d'Azur)Londra(Italienisch für London) → EGLL, EGKK, EGLC科隆(Chinesisch für Köln) → EDDK (Cologne Bonn Airport)
2. IATA- und ICAO-Code-Suche
Exakte Übereinstimmung wird höchstpriorisiert durch das Meilisearch-Ranking (attribute-Regel vor sort).
Beispiele:
MUC→ EDDMEDDK→ Cologne Bonn AirportLHR→ London HeathrowCDG→ Paris Charles de Gaulle
3. Umgangssprachliche Namen & Spitznamen
Kuratierte Liste von Nicknamen pro Flughafen (data/airport_nicknames.json) + Meilisearch-Synonyme.
Beispiele:
Malle→ LEPA (Palma de Mallorca)Heathrow→ EGLL (London Heathrow)Gatwick→ EGKK (London Gatwick)Schönefeld→ EDDB (Berlin Brandenburg)Tegel→ EDDB (Tegel ist Synonym für Berlin, wird auf BER umgeleitet)
4. Regional- und Gebietssuche (Geo-Fallback)
Wenn kein direkter Flughafen gefunden wird, sucht das System im places-Index (Städte, Regionen, Inseln, Seen, Gebirge, Tourismusregionen) und gibt die nächstgelegenen Airports zurück. Bei mehreren gleich guten Orts-Treffern gewinnt der bekanntere (Einwohnerzahl, Wikipedia-Verbreitung), bei Gleichstand der Ort im Land des Channels. Das Feld context ({name, type}; nearCity bleibt als Alias) ist dann im Response gesetzt.
Zusätzlich gilt: Trifft die Eingabe exakt den Namen eines Gewässers, einer Küste oder Insel (See, Küste, Insel), hat das Gebiet Vorrang vor Flughafen-Treffern – „Bodensee" liefert Flughäfen rund um den See (Friedrichshafen, St. Gallen-Altenrhein, Memmingen, Zürich) statt nur des Flughafens, der „Bodensee" im Namen trägt. Wird ein Flughafen nur über Synonym/Alias gefunden („Wittenberg" → Leipzig/Halle), bleiben die Treffer gleich, context benennt aber den gemeinten Ort. Dadurch kann das Frontend häufiger eine Überschrift wie „Flughäfen in der Nähe von …" zeigen.
Die Airports werden innerhalb eines 150-km-Radius nach einem kombinierten Score aus Relevanz und Entfernung gerankt:
- Nahe Airports werden deutlich bevorzugt (Orts-Anker: Decay 15 km)
- Populäre aber weit entfernte Großflughäfen werden nach hinten gereiht
- Beispiel: „Wittenberg" → Leipzig/Halle (
57 km) erscheint vor Berlin (80 km)
Beispiele:
Schwarzwald→ EDTL (Schwarzwald/Lahr), EDSB (Karlsruhe/Baden-Baden)Dolomiten→ LIPB (Bozen), LOWI (Innsbruck)Toskana/Tuscany→ LIRQ (Florenz), LIRP (Pisa), LIQS (Siena)Lake Garda→ LIPX (Verona), LIPO (Brescia)French Riviera→ LFMN (Nice Côte d'Azur)Côte d'Azur→ LFMN (Nice Côte d'Azur)
5. Ländername-Suche
Ländernamen in den 9 Sprachen werden erkannt (symfony/intl) und liefern die Top-Flughäfen des Landes, sortiert nach Relevanz.
Beispiele:
Germany/Deutschland/Allemagne/Germania→ Top-Flughäfen in DeutschlandItaly/Italien/Italie→ Top-Flughäfen in ItalienSpain/Spanien/Espagne→ Top-Flughäfen in Spanien
6. Leere Suche / Top-Airports
Ohne Suchbegriff werden die Top-Airports nach Relevanz-Score zurückgegeben — channelspezifisch gefiltert.
Beispiele (Channel: jetappde):
- Leere Anfrage → Top-Airports in Deutschland (EDDF, EDDM, EDDB, EDDK)
Beispiele (Channel: default / en_US):
- Leere Anfrage → Global Top-Airports (EGLL, LFPG, EDDF, EHAM, ...)
7. Koordinaten-basierte Suche
Mit lat/lng-Parametern werden die nächstgelegenen Flughäfen nach Luftlinien-Distanz sortiert zurückgegeben. Das Feld distanceKm ist im Response gesetzt.
Beispiel:
lat=48.137154&lng=11.576124(Marienplatz München) → EDDM (28 km), EDMA (60 km), ...
Response-Felder
| Feld | Beschreibung | Beispiel |
|---|---|---|
id |
ICAO-Code | EDDM |
iataCode |
IATA-Code | MUC |
icaoCode |
ICAO-Code | EDDM |
name |
Lokalisierter Flughafenname | München Franz Josef Strauß |
city |
Lokalisierter Stadtname | München |
country |
Lokalisierter Ländername | Deutschland |
countryCode |
ISO-3166-1-Alpha-2-Ländercode | DE |
regionName |
Lokalisierter Regionsname | Bayern |
regionCode |
ISO-3166-2-Regionscode | DE-BY |
lat / lng |
Koordinaten des Flughafens | 48.3538 / 11.7861 |
continent |
Kontinentcode | EU |
isTop |
Kuratierter Top-Flughafen | true |
type |
Flughafentyp | large_airport |
scheduledService |
Linienflugbetrieb | true |
endonym |
Einheimischer Name (nur wenn abweichend) | Flughafen München |
cityEndonym |
Einheimischer Stadtname (nur wenn abweichend) | München |
distanceKm |
Entfernung in km (nur bei Geo-Suche) | 28.4 |
nearCity |
Geo-Fallback-Stadt (nur bei Regions-/Ortssuche; Alias von context.name) |
Freiburg im Breisgau |
context |
Ort/Gebiet, auf das sich die Liste bezieht: {name, type} mit type = city, region, tourist_region, coast, lake, island, mountain_range |
{"name": "Bodensee", "type": "lake"} |
matchType |
direct = Treffer über Name/Stadt/Destination/Code/kuratierte Pins; nearby = Alternativ-Flughafen in der Umgebung (im Frontend unter eigener Überschrift, 5 sichtbar, Rest ausklappbar) |
direct |
usage |
Nutzungsart: civil, military, heliport, seaplane. Militärflugplätze werden als „Militärflugplatz – Nutzung auf Anfrage“ gekennzeichnet |
civil |
countries |
Länder, die der Flughafen bedient (inkl. Nachbarland, z. B. LFSB → Frankreich/Schweiz) | [{"code":"CH","name":"Schweiz"}] |
destination |
Vermarktetes Reiseziel, falls abweichend von der Stadt (Anzeige „{destination} / {city}“), sonst null |
St. Moritz (LSZS) |
debug |
Nur bei debug=true: Score-Komponenten, Formel, Meilisearch-Ranking |
– |
API-Parameter
| Parameter | Pflicht | Beschreibung | Beispiel |
|---|---|---|---|
q |
Nein | Suchbegriff; leer = Top-Airports | Munich |
l |
Nein | Locale (Sprache, bei leerem q auch Länderfilter). Fallback: Header Accept-Language, sonst en_US |
de_DE, en, fr |
channel |
Nein | JetApp-Channel-Code (Länderfilter bei leerem q). Fallback: Header X-Channel, dann aus Locale abgeleitet. Unbekannter Channel = kein Filter |
jetappde, default |
lat / lng |
Nein | Koordinaten für Geo-Suche (nur gültig, wenn beide gesetzt, lat −90…90, lng −180…180; sonst ignoriert) | 48.14 / 11.58 |
limit |
Nein | Max. direkte Treffer (Standard: 10, min. 1, max. 50). Zusätzlich werden bis zu 10 nearby-Treffer angehängt (nur ab 10 % des besten Umgebungs-Scores, nie aufgefüllt) |
10 |
region |
Nein | ISO-3166-2-Filter (Format XX-YYY, ungültig = ignoriert); gilt auch für die Umgebungssuche |
DE-BW |
type |
Nein | Flughafentyp-Whitelist (ungültige Werte werden verworfen). Standard: Groß-/Mittelflughäfen plus alle im Legacy-System aktiven Flughäfen plus Whitelist; ein expliziter Wert überschreibt den Standard (ohne Legacy-/Whitelist-Ergänzung) | large_airport,medium_airport |
debug |
Nein | true = Score-Details je Treffer |
true |
Hinweis Standard-Suche: Sichtbar sind
large_airport,medium_airport, alle im Legacy-System aktiven Flughäfen (in_legacy_db, z. B. LFTZ) sowie die Einträge ausdata/airport_whitelist.json(z. B. LNMC, LECC, LESB). Weitere Erweiterungen (Avinode-Whitelist als Quelle,small_airportmit Linienverkehr oder Mindest-Startbahnlänge) sind in Evaluierung. Heliports/Wasserflugplätze außerhalb von Legacy/Whitelist sind nur per explizitemtypeabrufbar. Ein Score-Override beeinflusst nur das Ranking, nicht die Sichtbarkeit.
Channels & Länder-Vorfilterung
Bei leerem Suchbegriff werden Ergebnisse nach dem aktiven Channel auf das jeweilige Land gefiltert:
| Channel | Locale | Länderfilter |
|---|---|---|
default |
en_US / en | Kein Filter (global) |
jetappde |
de_DE / de | 🇩🇪 Deutschland |
jetappat |
de_AT | 🇦🇹 Österreich |
jetappch |
de_CH | 🇨🇭 Schweiz |
jetappch_fr |
fr_CH | 🇨🇭 Schweiz |
jetappch_it |
it_CH | 🇨🇭 Schweiz |
jetappfr |
fr_FR / fr | 🇫🇷 Frankreich |
jetappit |
it_IT / it | 🇮🇹 Italien |
jetappcouk |
en_GB | 🇬🇧 Großbritannien |
jetappes |
es_ES / es | 🇪🇸 Spanien |
Relevanz-Ranking
Die Reihenfolge der Suchergebnisse basiert auf einem mehrstufigen Relevanz-Score:
Score = ((Startbahn-Score × Regionskoeffizient × IsTop-Koeffizient) + (Buchungsfrequenz × 10)) × Typ-Koeffizient
| Faktor | Werte |
|---|---|
| Startbahn-Score | > 3000 m = 100 · > 2000 m = 60 · > 1200 m = 30 · > 600 m = 10 · sonst = 2 |
| Regionskoeffizient | Europa ×3 · Nordamerika ×2 · Asien/Ozeanien ×1,5 · Rest ×1 |
| Is-Top-Koeffizient | Als Top markiert ×5 · sonst ×1 |
| Buchungsfrequenz | Anzahl JetApp-Buchungen ab/zu diesem Airport |
| Typ-Koeffizient | Großflughafen/Mittel/Klein ×1,0 · Heliport ×0,5 · Wasserflugplatz ×0,3 · Sonstige ×0,7 |
Manuelle Overrides möglich über data/airport_score_overrides.json.
Umgebungssuche (Anker + Fill) — gilt bei jeder Text-Suche mit Treffer, bei Ortssuchen ohne Airport und bei reiner Standortsuche:
Der beste Treffer (Airport, Ort oder kuratierter Name wie „Gstaad“) ist der Anker und steht an erster Stelle. Die restlichen Plätze werden mit Flughäfen im Umkreis von 150 km aufgefüllt. Ihr Score wird mit einem Entfernungs-Decay-Faktor gewichtet:
Score = relevance_score × e^(−Entfernung_m / 40 000)
× 1,5 (Flughafen im Land des Ankers)
× 0,4 (kleine Flugplätze/Heliports ohne Linienverkehr)
Bei 40 km beträgt der Decay-Faktor ~37 %. Kleine Flugplätze werden abgewertet, aber nie ausgeschlossen. Länder- und Regionsnamen („Deutschland“, „Bayern“) bleiben reine Gebietssuchen ohne Umgebungs-Fill.
Weitere Regeln & Ausnahmen
- Reihenfolge der Auflösung (Text-Suche): (1) kuratierter Spitzname/Pin aus
place_nicknames.json→ (2) Ländername → (3) Flughafen-Volltext → (4) Orts-Treffer aus demplaces-Index mit Umgebungssuche → (5) Fallback mit niedriger Konfidenz (nie leer, wenn es Treffer gab). Länder-/Regionsnamen sind reine Gebietssuchen ohne Umgebungs-Fill. - Ländernamen-Ausnahme: Länder mit weniger als 3 passenden Flughäfen (z. B. „Monaco“) werden als normale Suche behandelt. „Spain“ liefert Spanien, nicht „Port of Spain“.
- Kuratierte Reihenfolgen: Einzelne Städte haben feste Hauptflughäfen (Paris → LFPG, Rom → LIRF, London → EGLL, Istanbul → LTFM). Spitznamen mit
exclusiveerhalten keinen Umgebungs-Fill. Alternative Schreibweisen (z. B. „Comer See“, „Lac de Côme“) liefern dieselbe Reihenfolge wie „Lake Como“. - Direkte vs. Umgebungs-Treffer: Weitere direkte Treffer müssen Score ≥ 0,55 haben und ≤ 150 km vom Anker entfernt sein. Mittlere/große Zivilflughäfen innerhalb 80 km vom Anker werden immer in die Umgebungsliste übernommen (z. B. Freiburg → Lahr, Donaueschingen, Straßburg).
- Kleine Flugplätze: Liegen außerhalb des Standard-Typfilters. Gibt es keinen sicheren Treffer, werden
small_airport-Treffer per Name/Stadt/Code vorangestellt („Saanen“ → LSGK vor Sion/Bern). - Gebiets-Vorrang: Exakter Gewässer-/Küsten-/Inselname schlägt Flughafen-Treffer („Bodensee“). Ausnahme: Der Suchbegriff ist exakt der IATA-/ICAO-Code des Top-Treffers; „Zürich“ bleibt Flughafen-Suche (See „Zürichsee“ ist kein exakter Treffer).
- Synonym-/Alias-Treffer: Flughäfen bleiben unverändert,
contextbenennt den gemeinten Ort („Wittenberg“ → Leipzig/Halle). - Stadtzuordnung: Die Stadt eines Flughafens ist der Ort, nach dem er benannt ist bzw. in dem er liegt – nicht die größte Stadt der Umgebung. Grenzüberschreitende Zuordnung nur für Flughäfen aus
airport_served_countries.json. - Anzeigenamen: Bevorzugt Override → GeoNames-Name → „Stadt + Zusatz“ (z. B. „Flughafen Mailand-Linate“) → offizieller Name, wenn die Stadt unsicher ist.
- Militärflugplätze: Nie ausgeschlossen, aber in der Umgebungssuche mit Faktor 0,4 abgewertet;
usage=militarywird gekennzeichnet. - Sichtbarkeit: Ein Score-Override (
airport_score_overrides.json) ändert nur das Ranking, nicht die Sichtbarkeit. - Stoppwörter: „airport“, „flughafen“, „aéroport“, „aeroporto“, „aeropuerto“, „lotnisko“, „international“ u. ä. werden bei der Suche ignoriert.
- Fehlerverhalten: Ungültige
lat/lng,regionodertypewerden ignoriert (kein 422). Fällt Meilisearch aus, antwortet eine Text-Suche über die Legacy-DB-Suche (nicht gecacht). - Cache: 300 s je Kombination aus Locale, Channel, Suchbegriff, Koordinaten (auf ~1 km gerundet), Limit, Region, Typ und Debug. Header
X-Cache: HIT|MISS.
Datenquellen & Update-Zyklus
| Quelle | Inhalt | Update |
|---|---|---|
| OurAirports (CSV) | Flughafenstammdaten, ICAO/IATA-Codes, Koordinaten, Runways | Wöchentlich (Mo 4:00 Uhr) |
| GeoNames (allCountries) | Mehrsprachige Orts-/Regionsnamen | Wöchentlich |
| GeoNames (cities5000) | Stadtnamen der Flughäfen | Wöchentlich |
| GeoNames (cities1000, Seen, Gebirge) | Places-Index: Orte ≥ 5000 Einw. weltweit, ab 1000 Einw. in DE/AT/CH/FR/MC/LI/IT/ES/GR/HR/PT/PL; bekannte Seen und Gebirge | Wöchentlich |
| Wikidata (SPARQL) | Touristische Regionen, Küsten, Seen, Gebirge, Skigebiete, Rivieras, Archipele, Täler (inkl. Bekanntheit über Wikipedia-Sitelinks) | Wöchentlich, 7-Tage-Cache |
| JetApp-DB | Buchungsfrequenz, Is-Top-Flags | Wöchentlich |
airport_nicknames.json |
Spitznamen, Umgangssprache | Manuell (Repo) |
airport_synonyms.json |
Bidirektionale Synonyme | Manuell (Repo) |
place_nicknames.json |
Override-Schicht: Slang, feste Flughafenlisten und explizite Reihenfolgen für Hauptflughäfen (z. B. Paris → LFPG) | Manuell (Repo) |
HTTP-Endpunkt zum Testen
GET /api/v2/airports/search — öffentlich, kein Login/JWT nötig, Antwort: JSON-Array. Alle Parameter siehe API-Parameter. Basis-URL (BASE) je Umgebung, z. B. https://main-bvxea6i-37nw664vivqqa.de-2.platformsh.site oder lokal https://<ddev-projekt>.ddev.site.
Im Browser
BASE/api/v2/airports/search?q=Malle&l=de&channel=jetappde
curl
BASE=https://main-bvxea6i-37nw664vivqqa.de-2.platformsh.site
# Freitext
curl -s -G "$BASE/api/v2/airports/search" --data-urlencode "q=Gstaad" -d l=de -d channel=jetappde
# Top-Airports eines Channels (leeres q)
curl -s -G "$BASE/api/v2/airports/search" -d l=de_AT -d channel=jetappat -d limit=6
# Koordinaten-Suche (Marienplatz München)
curl -s -G "$BASE/api/v2/airports/search" -d lat=48.137154 -d lng=11.576124
# Filter + Debug (Score-Details)
curl -s -G "$BASE/api/v2/airports/search" --data-urlencode "q=Heliport" -d type=heliport -d region=DE-BW -d debug=true
# Locale/Channel per Header statt Parameter, Cache-Status prüfen
curl -s -i -G "$BASE/api/v2/airports/search" --data-urlencode "q=Munich" -H "Accept-Language: en_US" -H "X-Channel: default" | grep -i "^x-cache"
# Kompakte Ausgabe (jq): ICAO, Name, matchType, context
curl -s -G "$BASE/api/v2/airports/search" --data-urlencode "q=Bodensee" -d l=de | jq -r '.[] | [.id, .name, .matchType, (.context.name // "-")] | @tsv'
Sonderzeichen/Leerzeichen im Suchbegriff immer mit
--data-urlencodebzw. URL-kodieren (Lake%20Como). Wiederholte Aufrufe kommen 300 s aus dem Cache (X-Cache: HIT); für frische Ergebnisseq,limitoder gerundete Koordinaten variieren.
Parameter-Kurzreferenz
| Parameter | Typ | Standard | Gültige Werte / Grenzen |
|---|---|---|---|
q |
String | leer | beliebig; leer = Top-Airports (bzw. Geo-Suche mit lat/lng) |
l |
String | Accept-Language, sonst en_US |
de, de_DE, de_AT, de_CH, fr, fr_CH, it, it_CH, en, en_GB, es, … (Ausgabesprache: de, en, fr, it, es, pl, zh, ar, ru) |
channel |
String | X-Channel, sonst aus l |
default, jetappde, jetappat, jetappch, jetappch_fr, jetappch_it, jetappfr, jetappit, jetappcouk, jetappes |
lat, lng |
Float | – | −90…90 / −180…180; beide nötig |
limit |
Integer | 10 | 1…50 (Werte außerhalb werden begrenzt) |
region |
String | – | ISO 3166-2, z. B. DE-BW, ES-CT |
type |
String (CSV) | Groß/Mittel + Legacy + Whitelist | z. B. large_airport, medium_airport, small_airport, heliport, seaplane_base |
debug |
Boolean | false |
true / false |
Beispielantwort (gekürzt)
[
{
"id": "EDDM", "iataCode": "MUC", "icaoCode": "EDDM",
"name": "Flughafen München", "city": "München", "country": "Deutschland", "countryCode": "DE",
"regionCode": "DE-BY", "lat": 48.3538, "lng": 11.7861,
"type": "large_airport", "isTop": true, "usage": "civil", "matchType": "direct",
"distanceKm": null, "context": null
}
]
Testszenarien
Aufbau: Sucheingabe → Erwartetes Ergebnis | Erstes Ergebnis (ICAO) |
nearCity-Feld | Hinweise
Gruppe 1: Flughafen-Direktsuche (Name)
| # | Eingabe (q) |
Locale | Channel | Erwartetes Erstes Ergebnis | ICAO | Hinweise |
|---|---|---|---|---|---|---|
| 1.1 | Munich |
en |
default |
Munich Franz Josef Strauss | EDDM | Englischer Name |
| 1.2 | München |
de |
jetappde |
Flughafen München | EDDM | Deutscher Name |
| 1.3 | Monaco |
en |
default |
Monaco Héliport | LNMC | Kleinster Heliport-Staat |
| 1.4 | Zurich |
en |
jetappch |
Zurich Airport | LSZH | CH-Channel |
| 1.5 | Zürich |
de |
jetappch |
Flughafen Zürich | LSZH | Umlaut im Namen |
| 1.6 | Vienna |
en |
default |
Vienna International Airport | LOWW | Englisch für Wien |
| 1.7 | Wien |
de |
jetappat |
Flughafen Wien-Schwechat | LOWW | Österreichischer Channel |
| 1.8 | Paris |
fr |
jetappfr |
Paris Charles de Gaulle | LFPG | Größter franz. Airport zuerst |
| 1.9 | Rome |
en |
default |
Rome Fiumicino | LIRF | Größter rom. Airport zuerst |
| 1.10 | Roma |
it |
jetappit |
Aeroporto di Roma–Fiumicino | LIRF | Italienische Locale |
Gruppe 2: IATA- und ICAO-Code-Suche
| # | Eingabe (q) |
Locale | Erwartetes Erstes Ergebnis | ICAO | Hinweise |
|---|---|---|---|---|---|
| 2.1 | MUC |
de |
Munich Franz Josef Strauss | EDDM | IATA → Exakte Priorität |
| 2.2 | EDDM |
de |
Munich Franz Josef Strauss | EDDM | ICAO → Exakte Priorität |
| 2.3 | LHR |
en |
London Heathrow | EGLL | IATA-Code |
| 2.4 | EGLL |
en |
London Heathrow | EGLL | ICAO-Code |
| 2.5 | CDG |
fr |
Paris Charles de Gaulle | LFPG | IATA-Code |
| 2.6 | CGN |
de |
Cologne Bonn Airport | EDDK | CGN ist Synonym für EDDK |
| 2.7 | JFK |
en |
John F. Kennedy International | KJFK | US-Airport per IATA |
| 2.8 | DXB |
en |
Dubai International | OMDB | Middle East |
| 2.9 | ZRH |
de |
Zürich Flughafen | LSZH | CH-Airport |
| 2.10 | ibz |
es |
Ibiza Airport | LEIB | Kleinschreibung muss funktionieren |
Gruppe 3: Tippfehler-Toleranz
| # | Eingabe (q) |
Erwartetes Erstes Ergebnis | ICAO | Tippfehler | Hinweise |
|---|---|---|---|---|---|
| 3.1 | Munchen |
Munich Franz Josef Strauss | EDDM | Fehlendes Umlaut-ü | Typo-Toleranz ab 4 Zeichen |
| 3.2 | Muenchen |
Munich Franz Josef Strauss | EDDM | Umlautschreibung | Synonym oder Typo |
| 3.3 | Heathrov |
London Heathrow | EGLL | v statt w | 1 Tippfehler |
| 3.4 | Frankfurtt |
Frankfurt am Main | EDDF | Doppeltes t | 1 Tippfehler |
| 3.5 | Amstterdam |
Amsterdam Schiphol | EHAM | Doppeltes t | 1 Tippfehler |
| 3.6 | Barcellona |
Barcelona El Prat | LEBL | Doppeltes l (ital. Schreibweise) | 1 Tippfehler |
| 3.7 | Marseillle |
Marseille Provence | LFML | 3 l | 1 Tippfehler |
| 3.8 | Istanbull |
Istanbul Airport | LTFM | Doppeltes l | 1 Tippfehler |
| 3.9 | Mallorka |
Palma de Mallorca | LEPA | k statt c | 1 Tippfehler ab 8 Zeichen |
| 3.10 | Brüsel |
Brussels Airport | EBBR | 1 s fehlt | 1 Tippfehler |
Gruppe 4: Umgangssprachliche Namen & Spitznamen
| # | Eingabe (q) |
Erwartetes Erstes Ergebnis | ICAO | Quelle |
|---|---|---|---|---|
| 4.1 | Malle |
Palma de Mallorca | LEPA | airport_nicknames.json + place_nicknames.json |
| 4.2 | Mallorca |
Palma de Mallorca | LEPA | airport_nicknames.json |
| 4.3 | Majorca |
Palma de Mallorca | LEPA | airport_nicknames.json (englischer Spitzname) |
| 4.4 | Heathrow |
London Heathrow | EGLL | airport_nicknames.json |
| 4.5 | Gatwick |
London Gatwick | EGKK | airport_nicknames.json |
| 4.6 | Stansted |
London Stansted | EGSS | airport_nicknames.json |
| 4.7 | Köln Bonn |
Cologne Bonn Airport | EDDK | airport_nicknames.json |
| 4.8 | Cologne Bonn |
Cologne Bonn Airport | EDDK | airport_nicknames.json |
| 4.9 | Schönefeld |
Berlin Brandenburg | EDDB | airport_nicknames.json (historisch) |
| 4.10 | BER |
Berlin Brandenburg | EDDB | IATA-Code / Nickname |
| 4.11 | Orly |
Paris Orly | LFPO | airport_nicknames.json |
| 4.12 | Roissy |
Paris Charles de Gaulle | LFPG | Pariser Volksmund |
| 4.13 | Marco Polo |
Venice Marco Polo | LIPZ | airport_nicknames.json |
| 4.14 | Malpensa |
Milan Malpensa | LIMC | airport_nicknames.json |
| 4.15 | Linate |
Milan Linate | LIML | airport_nicknames.json |
Gruppe 5: Mehrsprachige Suche
| # | Eingabe (q) |
Locale | Erwartetes Erstes Ergebnis | ICAO | Sprache |
|---|---|---|---|---|---|
| 5.1 | Cologne |
en |
Cologne Bonn Airport | EDDK | Englisch für Köln |
| 5.2 | Koeln |
de |
Cologne Bonn Airport | EDDK | ASCII-Umschreibung |
| 5.3 | Köln |
de |
Cologne Bonn Airport | EDDK | Korrekte Schreibweise |
| 5.4 | Colonia |
it |
Cologne Bonn Airport | EDDK | Italienisch für Köln |
| 5.5 | Francfort |
fr |
Frankfurt am Main | EDDF | Französisch für Frankfurt |
| 5.6 | Francoforte |
it |
Frankfurt am Main | EDDF | Italienisch für Frankfurt |
| 5.7 | Londra |
it |
London Heathrow | EGLL | Italienisch für London |
| 5.8 | Londres |
fr |
London Heathrow | EGLL | Französisch/Spanisch für London |
| 5.9 | Copenhague |
fr |
Copenhagen Airport | EKCH | Französisch für Kopenhagen |
| 5.10 | Varsovie |
fr |
Warsaw Chopin Airport | EPWA | Französisch für Warschau |
| 5.11 | 科隆 |
zh |
Cologne Bonn Airport | EDDK | Chinesisch für Köln |
| 5.12 | 慕尼黑 |
zh |
Munich Franz Josef Strauss | EDDM | Chinesisch für München |
| 5.13 | Мюнхен |
ru |
Munich Franz Josef Strauss | EDDM | Russisch für München |
| 5.14 | بارسلونا |
ar |
Barcelona El Prat | LEBL | Arabisch für Barcelona |
| 5.15 | Madryt |
pl |
Adolfo Suárez Madrid–Barajas | LEMD | Polnisch für Madrid |
Gruppe 6: Städtesuche (Stadt ≠ Flughafen)
| # | Eingabe (q) |
Locale | Erwartetes Erstes Ergebnis | ICAO | Hinweise |
|---|---|---|---|---|---|
| 6.1 | Berlin |
de |
Berlin Brandenburg | EDDB | Hauptflughafen der Stadt |
| 6.2 | London |
en |
London Heathrow | EGLL | Größter London-Airport zuerst |
| 6.3 | New York |
en |
John F. Kennedy International | KJFK | Größter NY-Airport |
| 6.4 | Dubai |
en |
Dubai International | OMDB | |
| 6.5 | Istanbul |
tr/en |
Istanbul Airport | LTFM | Neuer Airport größer als Sabiha |
| 6.6 | Barcelona |
es |
Barcelona El Prat | LEBL | |
| 6.7 | Nice |
fr |
Nice Côte d'Azur | LFMN | |
| 6.8 | Nizza |
de |
Nice Côte d'Azur | LFMN | Deutsch für Nice |
| 6.9 | Genf |
de |
Geneva Airport | LSGG | Deutsch für Genève |
| 6.10 | Genève |
fr |
Geneva Airport | LSGG | Französisch für Genf |
Gruppe 7: Regionssuche & Geo-Fallback (nearCity gesetzt)
Bei diesen Abfragen wird der Airport-Index (Stufe airport, z. B. Flughafenname enthält „Schwarzwald“), der places-Index (Stufe places) oder place_nicknames.json (Stufe nickname) genutzt.
Das Response-Feld nearCity enthält bei places/nickname den aufgelösten Ortsnamen. Die Tabelle zeigt das Ergebnis des lokalen Laufs von app:search:test (Stand Oktober 2026).
| # | Eingabe (q) |
Locale | Erstes Ergebnis | ICAO | Weitere (Top 3) | Stufe |
|---|---|---|---|---|---|---|
| 7.1 | Schwarzwald |
de |
Flughafen Schwarzwald (Lahr) | EDTL | EDSB, EDDS | airport |
| 7.2 | Black Forest |
en |
Black Forest Airport | EDTL | EDSB, EDDS | airport |
| 7.3 | Riviera |
en |
Villanova Albenga | LIMG | LNMC, LFMN | airport |
| 7.4 | French Riviera |
en |
Nice Côte d'Azur | LFMN | LNMC, LFMD | airport |
| 7.5 | Côte d'Azur |
fr |
Nice Côte d'Azur | LFMN | LNMC, LFMD | airport |
| 7.6 | Dolomiten |
de |
Bozen | LIPB | LOWI, LIPZ | airport |
| 7.7 | Dolomites |
en |
Bolzano Airport | LIPB | LOWI, LIPZ | places |
| 7.8 | Alpen |
de |
Zürich | LSZH | LSZB, LFSB | nickname |
| 7.9 | Alps |
en |
Zurich Airport | LSZH | LSZB, LSZC | nickname |
| 7.10 | Toskana |
de |
Florenz | LIRQ | LIRP, LIQS | places |
| 7.11 | Tuscany |
en |
Florence Peretola | LIRQ | LIRP, LIQS | places |
| 7.12 | Costa Brava |
es |
Girona | LEGE | LEBL, LFMP | airport |
| 7.13 | Costa del Sol |
es |
Málaga–Costa del Sol | LEMG | LEZL, LEGR | airport |
| 7.14 | Pyrenäen |
de |
Pau-Pyrénées | LFBP | LFBT, LFBZ | airport |
| 7.15 | Bretagne |
fr |
Rennes-Saint-Jacques | LFRN | EGJJ, EGJB | nickname |
| 7.16 | Normandie |
fr |
Deauville – Saint-Gatien | LFRG | LFRK, LFOH | airport |
| 7.17 | Südtirol |
de |
Bozen | LIPB | LOWI, LSZS | nickname |
| 7.18 | South Tyrol |
en |
Bolzano Airport | LIPB | LOWI, LSZS | nickname |
| 7.19 | Aegean |
en |
Athens International | LGAV | LGMK, LGPA | nickname |
| 7.20 | Mittelmeer |
de |
Catania | LICC | LICR, LICA | nickname |
| 7.21 | Lake Garda |
en |
Verona Villafranca | LIPX | LIPO, LIME | places |
Gruppe 7b: Kleine Orte ohne eigenen Flughafen (Geo-Fallback via places-Index)
Ortschaften, Kleinstädte und Stadtteile ohne eigenen Flughafen lösen den Geo-Fallback aus:
Das System sucht den Ort im places-Index (GeoNames cities1000, in Kernmärkten ab 1000 Einwohnern), ermittelt dessen Koordinaten und gibt die nächstgelegenen Flughäfen zurück. nearCity ist bei Stufe places gesetzt. Orte, die direkt zu einem Flughafen passen (Stufe airport), liefern diesen als Anker.
Die Ranking-Reihenfolge innerhalb des 150-km-Radius basiert auf einem Entfernungs-Decay-Score (relevance_score × e^(−dist / 15 km), ×1,5 gleiches Land, ×0,4 kleine Flugplätze), sodass näher gelegene Airports bevorzugt werden. Die Entfernung bezieht sich auf den Orts-Anker.
| # | Eingabe (q) |
Locale | Erstes Ergebnis | ICAO | Entfernung zum Anker | Stufe | Hinweis |
|---|---|---|---|---|---|---|---|
| 7b.1 | Esslingen |
de |
Stuttgart Airport | EDDS | ~8 km | places |
Kein eigener Airport; nächster relevanter Flughafen ist Stuttgart |
| 7b.2 | Esslingen am Neckar |
de |
Stuttgart Airport | EDDS | ~8 km | places |
Vollständiger Ortsname |
| 7b.3 | Lutherstadt Wittenberg |
de |
Leipzig/Halle Airport | EDDP | ~57 km | places |
EDDP vor EDDB (~80 km) |
| 7b.4 | Wittenberg |
de |
Leipzig/Halle Airport | EDDP | ~57 km | places |
Kurzform; Guard-Fall (EDDP vor EDDB) |
| 7b.5 | Heidelberg |
de |
Mannheim-City Airport | EDFM | ~15 km | places |
EDFM zuerst; EDDF (~70 km) an zweiter Stelle |
| 7b.6 | Freiburg im Breisgau |
de |
Freiburg im Breisgau Airfield | EDTF | — | airport |
Direkter Flugplatz-Treffer; danach EDTL (~39 km) |
| 7b.7 | Bodensee |
de |
Friedrichshafen Airport | EDNY | — | nickname |
Kuratierte Liste; danach LSZR, EDJA, LSZH |
| 7b.8 | Lake Constance |
en |
Friedrichshafen Airport | EDNY | ~11 km | nickname |
Englischer Name für Bodensee; danach LSZR, LSZH |
| 7b.9 | Potsdam |
de |
Berlin Brandenburg | EDDB | ~30 km | places |
Danach kleine Flugplätze (EDAZ, EDCS) |
| 7b.10 | Reims |
fr |
Châlons Vatry | LFOK | — | airport |
Direkter Treffer (Paris-Vatry, Stadt „Reims“); LFPG liegt außerhalb des Radius |
Gruppe 8: Ländernamen-Suche
| # | Eingabe (q) |
Locale | Channel | Erwartete Länder-Filterung | Hinweise |
|---|---|---|---|---|---|
| 8.1 | Germany |
en |
default |
Top-Airports in Deutschland | Synonym: Germany = Deutschland |
| 8.2 | Deutschland |
de |
default |
Top-Airports in Deutschland | Direkttreffer |
| 8.3 | Allemagne |
fr |
default |
Top-Airports in Deutschland | Französisch für Deutschland |
| 8.4 | Germania |
it |
default |
Top-Airports in Deutschland | Italienisch für Deutschland |
| 8.5 | Italy |
en |
default |
Top-Airports in Italien | |
| 8.6 | Spain |
en |
default |
Top-Airports in Spanien | |
| 8.7 | France |
en |
default |
Top-Airports in Frankreich | |
| 8.8 | Switzerland |
en |
default |
Top-Airports in der Schweiz | |
| 8.9 | Schweiz |
de |
default |
Top-Airports in der Schweiz | |
| 8.10 | United Kingdom |
en |
default |
Top-Airports in UK |
Gruppe 9: Leere Suche / Channel-spezifische Top-Airports
Sortierung nach relevance_score (Piste × Region × is_top + Buchungen × 10), gefiltert auf das Land des Channels. Geprüft wird die Menge der Top-10, nicht die exakte Reihenfolge – Buchungsdaten verschieben die Reihenfolge (Stand 2026-10-14).
| # | Eingabe (q) |
Channel | Erwartet in den Top 10 | Hinweise |
|---|---|---|---|---|
| 9.1 | (leer) | jetappde |
EDDF, EDDM, EDDB, EDDK | Nur deutsche Airports |
| 9.2 | (leer) | jetappat |
LOWW, LOWI, LOWS | Nur österreichische Airports |
| 9.3 | (leer) | jetappch |
LSZH, LSGG, LSZA | Nur Schweizer Airports |
| 9.4 | (leer) | jetappfr |
LFPO, LFMN | Nur französische Airports; LFPG nicht in den Top 10 (is_top=false, kaum Buchungen) |
| 9.5 | (leer) | jetappit |
LIMC, LIPZ | Nur italienische Airports; LIRF nicht in den Top 10 (LIRA hat mehr Buchungen) |
| 9.6 | (leer) | jetappcouk |
EGLL, EGKK, EGSS | Nur britische Airports |
| 9.7 | (leer) | jetappes |
LEMD, LEBL, LEPA | Nur spanische Airports |
| 9.8 | (leer) | default |
EDDF, EDDM | Global, keine Filterung; Top 10 wird von Buchungsdaten dominiert (LEPA, LSZH, LOWW, …) |
| 9.9 | (leer) | jetappch_fr |
LSGG, LSZH, LSZA | Schweiz (franz. Channel) |
| 9.10 | (leer) | jetappch_it |
LSZA, LSZH | Schweiz (ital. Channel); Lugano nicht zwingend vorne |
---|---|---|---|---|
| 9.1 | (leer) | jetappde | EDDF, EDDM, EDDB, EDDK | Nur deutsche Airports |
| 9.2 | (leer) | jetappat | LOWW, LOWI, LOWS | Nur österreichische Airports |
| 9.3 | (leer) | jetappch | LSZH, LSGG, LSZA | Nur Schweizer Airports |
| 9.4 | (leer) | jetappfr | LFPG, LFPO, LFMN | Nur französische Airports |
| 9.5 | (leer) | jetappit | LIRF, LIMC, LIPZ | Nur italienische Airports |
| 9.6 | (leer) | jetappcouk | EGLL, EGKK, EGSS | Nur britische Airports |
| 9.7 | (leer) | jetappes | LEMD, LEBL, LEPA | Nur spanische Airports |
| 9.8 | (leer) | default | EGLL, LFPG, EDDF, EHAM | Global, keine Filterung |
| 9.9 | (leer) | jetappch_fr | LSGG, LSZH, LSZA | Schweiz (franz. Channel) |
| 9.10 | (leer) | jetappch_it | LSZA, LSZH | Schweiz (ital. Channel, Lugano vorne) |
Gruppe 10: Geo-Koordinaten-Suche (distanceKm gesetzt)
| # | lat |
lng |
q |
Erwartetes Erstes Ergebnis | ICAO | Entfernung (ca.) |
|---|---|---|---|---|---|---|
| 10.1 | 48.137 | 11.576 | (leer) | München Franz Josef Strauß | EDDM | ~28 km |
| 10.2 | 48.137 | 11.576 | Munich |
München Franz Josef Strauß | EDDM | ~28 km (kombiniert) |
| 10.3 | 51.509 | -0.118 | (leer) | London City Airport | EGLC | ~11 km (nächster) |
| 10.4 | 48.856 | 2.352 | (leer) | Paris Le Bourget (Orly an 2. Stelle) | LFPB | ~11 km (nächster) |
| 10.5 | 47.376 | 8.541 | (leer) | Zürich Airport | LSZH | ~11 km |
| 10.6 | 43.296 | 5.380 | (leer) | Marseille Provence | LFML | ~26 km |
| 10.7 | 45.464 | 9.190 | (leer) | Milan Linate | LIML | ~7 km |
| 10.8 | 40.416 | -3.703 | (leer) | Adolfo Suárez Madrid–Barajas | LEMD | ~14 km |
| 10.9 | 25.204 | 55.270 | (leer) | Dubai International | OMDB | ~4 km |
| 10.10 | 52.370 | 4.895 | (leer) | Amsterdam Schiphol | EHAM | ~15 km |
Gruppe 11: Filterparameter (region, type)
| # | Eingabe (q) |
region |
type |
Erwartetes Ergebnis | Hinweise |
|---|---|---|---|---|---|
| 11.0 | (leer) | — | — | Standard: large_airport + medium_airport + Legacy-aktive Flughäfen + Whitelist |
Sonstige small_airports/Heliports nur per type |
| 11.1 | (leer) | DE-BW |
— | Airports in Baden-Württemberg | EDDS, EDSB, EDTL |
| 11.2 | (leer) | DE-BY |
— | Airports in Bayern | EDDM, EDMA, EDDN |
| 11.3 | (leer) | FR-IDF |
— | Airports in Île-de-France | LFPB, LFPO, LFPG (OurAirports kennt nur FR-IDF, keine Départements) |
| 11.4 | (leer) | — | large_airport |
Nur Großflughäfen | Keine Heliports, kein Regionalflughafen |
| 11.5 | (leer) | — | heliport |
Nur Heliports | LNMC, EGLW, … |
| 11.6 | Monaco |
— | heliport |
Monaco Héliport | LNMC |
| 11.7 | London |
— | large_airport,medium_airport |
Heathrow, City, Gatwick (kuratierte Reihenfolge), danach Luton, Biggin Hill | Nickname-Pin London |
| 11.8 | (leer) | CH-GE |
— | Airports in Kanton Genf | LSGG |
| 11.9 | (leer) | IT-32 |
— | Airports in Trentino-Südtirol | LIPB (Bozen) |
| 11.10 | (leer) | ES-CT |
large_airport,medium_airport |
Airports in Katalonien | LEBL, LEGE |
Gruppe 12: Limit-Parameter & Caching
| # | Eingabe | limit |
Erwartetes Verhalten | Hinweise |
|---|---|---|---|---|
| 12.1 | q=Munich |
— | Max. 10 Ergebnisse (Standard) | Default bei nicht-leerem q |
| 12.2 | (leer) | — | 10 Ergebnisse (Standard) | Default bei leerem q |
| 12.3 | q=London |
limit=10 |
Max. 10 Ergebnisse | Explizit gesetzt |
| 12.4 | q=Paris |
limit=50 |
Max. 50 Ergebnisse | Maximales Limit |
| 12.5 | q=Berlin |
limit=100 |
Max. 50 Ergebnisse | Über Max → wird auf 50 gecapped |
| 12.6 | q=Munich (2. Aufruf) |
— | Identische Antwort, Header X-Cache: HIT |
300 s Cache |
| 12.7 | q=Munich&l=de vs q=Munich&l=fr |
— | Unterschiedliche Sprachausgabe | Cache-Key enthält Locale |
| 12.8 | q=Munich&channel=jetappde vs q=Munich&channel=default |
— | Gleiche Airports, anderer Ranking-Kontext | Cache-Key enthält Channel |
Gruppe 13: Fehler- und Edge-Cases
| # | Szenario | Erwartetes Verhalten | HTTP-Status |
|---|---|---|---|
| 13.1 | q=XXXXXXXXNOTEXISTING |
Leeres Array [] |
200 |
| 13.2 | q= (explizit leer) |
Top-Airports wie ohne q | 200 |
| 13.3 | lat=999&lng=999 |
Ungültige Koordinaten werden ignoriert (kein Geo-Sort) | 200 |
| 13.4 | limit=0 |
Wird auf 1 angehoben (max(1, limit)) |
200 |
| 13.5 | limit=-1 |
Wird auf 1 angehoben | 200 |
| 13.6 | l=xx_XX (unbekannte Locale) |
Fallback auf en oder Default-Sprache |
200 |
| 13.7 | channel=unknownchannel |
Kein Länderfilter (wie default) |
200 |
| 13.8 | Meilisearch nicht erreichbar | Text-Suche fällt auf Legacy-DB-Suche zurück (nicht gecacht) | 200 |
| 13.9 | type=invalid_type |
Ungültiger Typ wird verworfen → Standard-Typfilter | 200 |
| 13.10 | Sehr langer Suchbegriff (> 500 Zeichen) | Kein Absturz, i. d. R. leeres Ergebnis | 200 |
Gruppe 14: Spezial-Airports & Sonderzeichen
| # | Eingabe (q) |
Locale | Erwartetes Erstes Ergebnis | ICAO | Besonderheit |
|---|---|---|---|---|---|
| 14.1 | Côte d'Azur |
fr |
Nice Côte d'Azur | LFMN | Apostroph + Akzent |
| 14.2 | São Paulo |
en |
São Paulo/Guarulhos | SBGR | Tilde |
| 14.3 | Düsseldorf |
de |
Düsseldorf Airport | EDDL | Umlaut ü |
| 14.4 | Dusseldorf |
en |
Düsseldorf Airport | EDDL | Ohne Umlaut |
| 14.5 | Nürnberg |
de |
Nuremberg Airport | EDDN | Umlaut |
| 14.6 | Nuremberg |
en |
Nuremberg Airport | EDDN | Anglisiert |
| 14.7 | Reykjavík |
en |
Reykjavík Airport (Stadtflughafen) | BIRK | Isländisch; Keflavík (BIKF) folgt auf Platz 2 |
| 14.8 | Reykjavik |
en |
Reykjavík Airport (Stadtflughafen) | BIRK | Ohne Akzent |
| 14.9 | D'Azur |
fr |
Nice Côte d'Azur | LFMN | Partieller Suchbegriff |
| 14.10 | St. Moritz |
de |
Samedan Airport | LSZS | Punkt im Namen |
Bekannte Einschränkungen
| Einschränkung | Details |
|---|---|
| Keine One-Way-Synonyme | Meilisearch unterstützt nur bidirektionale Synonyme. Unidirektionale Aliase (Slang → ICAO) laufen über data/airport_nicknames.json (Feld primary_names) |
| ISO-2-Ländercodes nicht suchbar | country.code ist filterbar, aber nicht durchsuchbar (kein Treffer auf "DE" als Freitext) |
| Endonym nur bei Abweichung | Das Feld endonym ist nur gesetzt, wenn der einheimische Name vom lokalisierten Namen abweicht |
nearCity/context nur bei Ortsbezug |
Direkte Flughafen-Treffer (Name/Stadt/Code) haben kein context; gesetzt bei Nickname, Places, Gebiets-Namen (z. B. „Bodensee") und Synonym-Treffern |
| Cache 5 Minuten | Änderungen am Index sind erst nach 5 Minuten sichtbar (oder Cache-Invalidierung) |
| Maximales Limit: 50 | Höhere limit-Werte werden auf 50 gecapped |
| Wöchentlicher Datenstand | Neueste Flughafen-Änderungen sind frühestens montags nach 4:00 Uhr verfügbar |
Dieses Dokument wird bei größeren Feature-Änderungen aktualisiert. Bei Fragen: Development-Team.