Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Searching OpenStreetMap with Elasticsearch
Search
Christoph Lingg
November 24, 2015
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Searching OpenStreetMap with Elasticsearch
Christoph Lingg
November 24, 2015
Other Decks in Programming
See All in Programming
Spec-driven Development with AI
simas
PRO
0
2.3k
Modernizing iOS Apps
seyfoyun
0
150
はじめてのPLATEAU
nokonoko1203
1
610
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
180
Moscow Python Meetup №112. Как поселить ИИ агентов в event driven архитектуре
moscowdjango
PRO
0
110
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.2k
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
240
LLM 101
dalinaum
0
470
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
360
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
240
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.4k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
970
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
The browser strikes back
jonoalderson
0
1.9k
New Earth Scene 8
popppiees
4
2.8k
How STYLIGHT went responsive
nonsquared
100
6.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
390
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Six Lessons from altMBA
skipperchong
29
4.6k
Transcript
Searching OpenStreetMap with Elasticsearch photon.komoot.de Christoph Lingg –
[email protected]
komoot
OpenStreetMap • free • editable map • worldwide • built
by volunteers • open-content licence
OpenStreetMap
OpenStreetMap
Geocoding „Böcklerpark“ Coordinate(10.1 50.2) Park Kreuzberg, Berlin, Germany
Nominatim • started many years ago • standard solution for
OSM • based on Postgres/Postgis, SQL, PHP, C • powerfull + mature • drawbacks ◦ slow ◦ no typo tolerance ◦ no partial match / search-as-you-type
Closing the Gap • suitable for mobile usage • “built
on the shoulder of a giant” → elasticsearch • open source • free public API • enhance the OSM ecosystem
{ "name": "VIASKO", "housenumber": "33a", "amenity": "restaurant", "coordinate": [10, 52
], "street": "Bahnhofstraße", "postcode": "10403", "city": "Berlin", "state": "Berlin", "country": "Germany", "context": "Kreuzberg", "importance": 0.1 } OSM Entry { "name": "VIASKO", "housenumber": "33a", "amenity": "restaurant", "coordinate": [10, 52] } Photon Document
Photon Importer VIASKO Bahnhofstraße Postcode 10403 City Berlin State Country
Germany Berlin Nominatim DB Postgis Elasticsearch Index Photon Importer
Type-ahead search "filter": { "photonngram": { "min_gram": "1", "type": "edgeNGram",
"max_gram": "100" },... }
Typo Tolerance "query": { "bool": { "must": { "match": {
"collector.default": { "fuzziness": 1, "query": "${query}", "analyzer": "search_ngram", "prefix_length": 2 } } }, "should":{ "match": { "collector.${lang}.raw": { "query": "${query}", "boost": 100, "analyzer": "search_raw" } } } }
Location biased "score_mode": "multiply", "functions": [ { "script_score": { "script":
"1 + doc['importance'].value * 100" } }, { "script_score": { "script": " dist = doc['coordinate'].distanceInKm(lat, lon); 0.5 + ( 1.5 / (1.0 + dist/40.0) )", "params": { "lat": "${lat}", "lon": "${lon}" } } } ]
Photon Project • 100 Mio documents • 60 GB search
index • easy install • photon.komoot.de • github.com/komoot/photon • want be informed for the next sprint? →
[email protected]
komoot.de/hack15