joacub/geonames-server

ZF2 module, index geonames data & provides a search API using Elasticsearch

dev-master 2013-04-10 14:19 UTC

This package is not auto-updated.

Last update: 2024-03-26 01:13:52 UTC


README

Introduction

GeonamesServer is ZF2 module. It indexes geonames data & provides a search API using Elasticsearch.
Elasticsearch is a distributed, RESTful, open source search server based on Apache Lucene.

Demo
Composer package

Elasticsearch index mapping

{
    "geonameid": "2988507",
    "country": "FR",
    "name": "Paris",
    "latitude": "48.85341",
    "longitude": "2.3488",
    "population": 2138551,
    "timezone": "Europe/Paris",
    "type": "city",
    "parents": [
        {
            "geonameid": "2968815",
            "name": "Paris",
            "country": "FR",
            "type": "ADM2"
        },
        {
            "geonameid": "3012874",
            "name": "Île-de-France",
            "country": "FR",
            "type": "ADM1"
        },
        {
            "geonameid": "3017382",
            "name": "France",
            "country": "FR",
            "type": "country"
        }
    ]
}

Module installation

  1. install elasticsearch

  2. cd my/project/directory

  3. create a composer.json file with following contents:

    {
        "require": {
            "ghislainf/geonames-server": "dev-master"
        }
    }
  4. install composer via curl -s http://getcomposer.org/installer | php (on windows, download http://getcomposer.org/installer and execute it with PHP)

  5. run php composer.phar install

  6. open my/project/directory/configs/application.config.php and add the following key to your modules:

    'GeonamesServer',
  7. copy config/geonamesserver.local.php in my/project/directory/config/autoload

  8. edit my/project/directory/config/autoload/geonamesserver.local.php, let yourself guided by comments.

  9. import geonames data in your elasticsearch index :

    $ php public/index.php geonames_install

    Install process

Use API

Search :

GET /geonames/_search/{string_query}
GET /geonames/_search/{string_query}/{page}
GET /geonames/_search/{string_query}/{page}/{size}

{page} and {size} are optional, by default {page} = 1 and {size} = 10

Get document :

GET /geonames/_get/{geonameid}
GET /geonames/_get/{geonameid},{geonameid},..