]> git.openstreetmap.org Git - nominatim.git/blobdiff - docs/admin/Import-and-Update.md
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / docs / admin / Import-and-Update.md
index 179b729ee11a93616c93d49beef4509fc450a258..ad7773642ec37a49ec366fa6c151f9e4a4c96a9e 100644 (file)
@@ -36,7 +36,7 @@ the directory exists. There should be at least 40GB of free space.
 ### Wikipedia rankings
 
 Wikipedia can be used as an optional auxiliary data source to help indicate
-the importance of osm features. Nominatim will work without this information
+the importance of OSM features. Nominatim will work without this information
 but it will improve the quality of the results if this is installed.
 This data is available as a binary download:
 
@@ -45,7 +45,7 @@ This data is available as a binary download:
     wget https://www.nominatim.org/data/wikipedia_redirect.sql.bin
 
 Combined the 2 files are around 1.5GB and add around 30GB to the install
-size of nominatim. They also increase the install time by an hour or so.
+size of Nominatim. They also increase the install time by an hour or so.
 
 *NOTE:* you'll need to download the Wikipedia rankings before performing
 the initial import of the data if you want the rankings applied to the
@@ -53,18 +53,98 @@ loaded data.
 
 ### UK postcodes
 
-Nominatim can use postcodes from an external source to improve searches that involve a UK postcode. This data can be optionally downloaded: 
+Nominatim can use postcodes from an external source to improve searches that involve a UK postcode. This data can be optionally downloaded:
 
     cd $NOMINATIM_SOURCE_DIR/data
     wget https://www.nominatim.org/data/gb_postcode_data.sql.gz
 
+## Choosing the Data to Import
+
+In its default setup Nominatim is configured to import the full OSM data
+set for the entire planet. Such a setup requires a powerful machine with
+at least 32GB of RAM and around 800GB of SSD hard disks. Depending on your
+use case there are various ways to reduce the amount of data imported. This
+section discusses these methods. They can also be combined.
+
+### Using an extract
+
+If you only need geocoding for a smaller region, then precomputed extracts
+are a good way to reduce the database size and import time.
+[Geofabrik](https://download.geofabrik.de) offers extracts for most countries.
+They even have daily updates which can be used with the update process described
+below. There are also
+[other providers for extracts](https://wiki.openstreetmap.org/wiki/Planet.osm#Downloading).
+
+Please be aware that some extracts are not cut exactly along the country
+boundaries. As a result some parts of the boundary may be missing which means
+that Nominatim cannot compute the areas for some administrative areas.
+
+### Dropping Data Required for Dynamic Updates
+
+About half of the data in Nominatim's database is not really used for serving
+the API. It is only there to allow the data to be updated from the latest
+changes from OSM. For many uses these dynamic updates are not really required.
+If you don't plan to apply updates, the dynamic part of the database can be
+safely dropped using the following command:
+
+```
+./utils/setup.php --drop
+```
+
+Note that you still need to provide for sufficient disk space for the initial
+import. So this option is particularly interesting if you plan to transfer the
+database or reuse the space later.
+
+### Reverse-only Imports
+
+If you only want to use the Nominatim database for reverse lookups or
+if you plan to use the installation only for exports to a
+[photon](https://photon.komoot.de/) database, then you can set up a database
+without search indexes. Add `--reverse-only` to your setup command above.
+
+This saves about 5% of disk space.
+
+### Filtering Imported Data
+
+Nominatim normally sets up a full search database containing administrative
+boundaries, places, streets, addresses and POI data. There are also other
+import styles available which only read selected data:
+
+* **settings/import-admin.style**
+  Only import administrative boundaries and places.
+* **settings/import-street.style**
+  Like the admin style but also adds streets.
+* **settings/import-address.style**
+  Import all data necessary to compute addresses down to house number level.
+* **settings/import-full.style**
+  Default style that also includes points of interest.
+
+The style can be changed with the configuration `CONST_Import_Style`.
+
+To give you an idea of the impact of using the different styles, the table
+below gives rough estimates of the final database size after import of a
+2018 planet and after using the `--drop` option. It also shows the time
+needed for the import on a machine with 32GB RAM, 4 CPUS and SSDs. Note that
+the given sizes are just an estimate meant for comparison of style requirements.
+Your planet import is likely to be larger as the OSM data grows with time.
+
+style     | Import time  |  DB size   |  after drop
+----------|--------------|------------|------------
+admin     |    5h        |  190 GB    |   20 GB
+street    |   42h        |  400 GB    |  180 GB
+address   |   59h        |  500 GB    |  260 GB
+full      |   80h        |  575 GB    |  300 GB
+
+You can also customize the styles further. For an description of the
+style format see [the development section](../develop/Import.md).
 
 ## Initial import of the data
 
-**Important:** first try the import with a small excerpt, for example from
+**Important:** first try the import with a small extract, for example from
 [Geofabrik](https://download.geofabrik.de).
 
-Download the data to import and load the data with the following command:
+Download the data to import and load the data with the following command
+from the build directory:
 
 ```sh
 ./utils/setup.php --osm-file <data file> --all [--osm2pgsql-cache 28000] 2>&1 | tee setup.log
@@ -77,7 +157,7 @@ about the same size as the file you are importing but never more than
 2/3 of RAM available. If your machine starts swapping reduce the size.
 
 Computing word frequency for search terms can improve the performance of
-forward geocoding in particular under high load as it helps Postgres' query
+forward geocoding in particular under high load as it helps PostgreSQL's query
 planner to make the right decisions. To recompute word counts run:
 
 ```sh
@@ -98,15 +178,6 @@ you also need to enable these key phrases like this:
 
 Note that this command downloads the phrases from the wiki link above.
 
-### Reverse-only Imports
-
-If you only want to use the Nominatim database for reverse lookups or
-if you plan to use the installation only for exports to a
-[photon](http://photon.komoot.de/) database, then you can set up a database
-without search indexes. Add `--reverse-only` to your setup command above.
-
-This saves about 5% of disk space.
-
 
 ## Installing Tiger housenumber data for the US
 
@@ -124,7 +195,7 @@ entire US adds about 10GB to your database.
 
     `data-source/us-tiger/README.md` explains how the data got preprocessed.
 
-  2. Import the data into your Nominatim database: 
+  2. Import the data into your Nominatim database:
 
         ./utils/setup.php --import-tiger-data
 
@@ -141,7 +212,7 @@ entire US adds about 10GB to your database.
 
 ## Updates
 
-There are many different possibilities to update your Nominatim database.
+There are many different ways to update your Nominatim database.
 The following section describes how to keep it up-to-date with Pyosmium.
 For a list of other methods see the output of `./utils/update.php --help`.
 
@@ -170,7 +241,7 @@ to update using the global minutely diffs.
 
 If you want a different update source you will need to add some settings
 to `settings/local.php`. For example, to use the daily country extracts
-diffs for Ireland from geofabrik add the following:
+diffs for Ireland from Geofabrik add the following:
 
     // base URL of the replication service
     @define('CONST_Replication_Url', 'https://download.geofabrik.de/europe/ireland-and-northern-ireland-updates');
@@ -186,7 +257,7 @@ To set up the update process now run the following command:
 It outputs the date where updates will start. Recheck that this date is
 what you expect.
 
-The --init-updates command needs to be rerun whenever the replication service
+The `--init-updates` command needs to be rerun whenever the replication service
 is changed.
 
 #### Updating Nominatim