/airmail

Lightweight geocoder in pure Rust

Primary LanguageRustApache License 2.0Apache-2.0

📫 Airmail 📫

Airmail is an extremely lightweight geocoder1 written in pure Rust. Built on top of tantivy, it offers a low memory footprint and fast indexing (~8k POIs per second on my machine). Airmail currently supports English queries based on place names and addresses in North American address formats. Other languages and address formats work, but have not been systematically tested.

Features

Airmail's killer feature is the ability to query remote indices, e.g. on S3. This lets you keep your index hosting costs fixed while you scale horizontally, and lowers the baseline costs associated with hosting a planet instance by around 2x-10x compared to other geocoders.

Roadmap

  • English/North American query parser for addresses, place names, and place name queries with locality or neighborhood.
  • Index OpenStreetMap data.
  • Index OpenAddresses data (not currently used in demo).
  • Index WhosOnFirst data.
  • API server.
  • Address queries.
  • Named POI queries.
  • Prefix queries.
  • Query remote indices.
  • Support and test planet-scale indices.
  • Extend query parser for other locales.
  • Categorical search, e.g. "coffee shops near me".
  • Bounding box biasing and restriction.
  • Minutely updates?
  • Systematic/automatic quality testing in CI.
  • Alternate results, e.g. returning Starbucks locations for "Dunkin Donuts" queries on the US west coast.2

License

Dual MIT/Apache 2 license, at your option.

Footnotes

  1. A geocoder is a search engine for places. When you type in "vegan donut shop" into your maps app of choice, a geocoder is what shows you nearby places that fit your query.

  2. This will likely need to be done with a vector database and some machine learning, and may have major hosting cost implications. TBD.