Gisgraphy user guide


To suggest a change or a correction to any part of the documentation, please send a mail to David Masclet.

Introduction
About
A little bit of technic...
What's gisgraphy for ?
Some examples of uses
Requirements
What technologies are used ?
Placetype schema
License
Installation
Import Data
Options and environement specific settings
Import failure
Full text service
Description
Parameters
Web service
Output fields description
Java API
Geolocalisation service
Description
Parameters
Web service
Output fields description
Java API
Admin Interface
Login - Password
Import data
Screenshots
Security
Default admin password
Protect webServices
Performance
Jmeter
Database optimisations
JVM optimisations
[top]

Introduction

[top]

About

Gisgraphy is a free and open source framework that provides fulltext search and find nearby services for places on earth (aka : toponyms) from several databases (aka : gazeteers) on the Web (mainly Geonames, but not only : ESRI for instance). It provides an importer to inject the data into a strongly typed Postgres / Postgis database and use them via 2 webservices or a java API : geolocalisation and fulltext in many format (XML, json, PHP, ruby, python, Atom, RSS / GeoRSS). Here are the main functionalities :
[top]

A little bit of technic...

[top]

What's Gisgraphy for ?

[top]

Some examples of uses

[top]

Requirements

[top]

What technologies are used ?

[top]

Placetype schema

Here is a simple diagramme that represents relation beetween the placetype, gisFeature, Adm, country, and languages.



GisFeature is the mother class of all the placetype, it has all the basic informations.
Language represents a spoken language
AlternateName is a specific name for a specific language.

All the placetype extends gisFeature. Such as :
Adm are in tree structure.

A GisFeature :
[top]

License

Gisgraphy is licensed under the terms of the LGPL V3.0 License
[top]

Installation

[top]
Please go the the installation page
[top]

Import Data

You must use the admin interface. see the admin interface section for more informations
[top]

Debug Mode

Each Gisgraphy service (Geoloc and fulltext) is a servlet. Each servlet can be run in debug Mode. The error message will be in verbose mode. To do so just declare the servlet init parameter "debugMode" to true (in the web.xml) as shown :
<servlet>
		<servlet-name>geoloc service</servlet-name>
		<servlet-class>
			com.gisgraphy.servlet.GeolocServlet
		</servlet-class>
		 <init-param>
		 <!-- if true the output field error will contains the exception message. Default to false -->
			<param-name>debugMode</param-name>
			<param-value>true</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
</servlet>
	
	
<servlet>
		<servlet-name>fulltext service</servlet-name>
		<servlet-class>
			com.gisgraphy.servlet.FulltextServlet
		</servlet-class>
		<init-param>
		 <!-- if true the output field error will contains the exception message. Default to false -->
			<param-name>debugMode</param-name>
			<param-value>true</param-value>
		</init-param>
		<load-on-startup>2</load-on-startup>
</servlet>
	
[top]

Options and environement specific settings

All the options and environement specific settings are located in the env.properties file. The env.properties is located in the $GISGRAPHYDISTRIBUTION/webapps/ROOTWEB-INF/classes directory of the Gisgraphy distribution
Take care of white spaces in properties file : MyProperties=bar is not the same as MyProperties= bar (whitespace after the equals sign are taken into accounts)
[top]

importer.geonames.dir

This option determines the directory where the Geonames files are located. It must ends with / or \ according to the system path separator. it is also the directory where the Geonames files will be downloaded from the importer.geonames.downloadURL URL . On Windows The '\' character must be escaped as in the example bellow . The path can be absolute or relative (from the directory where you've launch Gisgraphy). It is not recommended to put space in the path.
. This option is case sensitive if the underlaying file system is case sensitive (e.g : Linux / Unix).
Examples on Linux :
importer.geonames.dir=./data/prod/
importer.geonames.dir=/home/user/data/prod/

Example on Windows
importer.geonames.dir=.\\data\\prod\\


Don't forget the ending slash (or backslash if you use windows) !


[top]

importer.geonames.downloadURL

This option determines the URL of the server to download the files to be processed. This option is case sensitive
Example :
importer.geonames.downloadURL=http://download.geonames.org/export/dump/


Don't forget the ending slash for the URL !


[top]

importer.filesToDownload

This option determines the files to be download from the importer.geonames.downloadURL URL. The files must be ';' separated. You can specify any files, but if you download from the Geonames server, you should specify country ZIP files (or allcountries.zip) and alternateNames.zip . This option is case sensitive.
Examples :
importer.filesToDownload=AD.zip;CY.zip
importer.filesToDownload=allCountries.zip


If you run an import and the change the option and re-run an import : you must delete the old downloaded file before re-run the import. If you don't : the files you've downloaded will be processed.

It is not necessary To download Countries.txt,iso-languagecodes.txt, because there are already in the Gisgraphy distrib. Just focus on the country you want to process and alternatenames.zip if you want to import alternate names.

If allCountries.txt file is in the importer.geonames.dir Directory, the other countries files will be logically ignored.


[top]

importer.retrieveFiles

Wether the files defined by the importer.filesToDownload option should be downloaded. If 'true' the importer will download the files according to the importer.filesToDownload option. If 'false', it will use the files already presents in importer.geonames.dir. This option should be in lower case
Examples :
importer.retrieveFiles=true
importer.retrieveFiles=false


[top]

fulltextSearchUrl

The URL of the SolR Server. If you use the SolR server of the Gisgraphy distribution : the URL should be the Gisgraphy URL follow by solr (name of the war file). If you need better performance, (that's to say run Gisgraphy and the SolR server in two distinct JVM. see jvm optimisation) : specify the URL of the server you want to use. This option is case sensitive.
Examples :
fulltextSearchUrl=http://localhost:8080/solr/

Example with the default SolR port
fulltextSearchUrl=http://localhost:8983/solr/


[top]

importerConfig.wrongNumberOfFieldsThrows

Wether we should throws an exception and stop the import if a line in an imported file haven't the expected number of fields (CSV fields). This option should be in lower case. it is recommended to set it to false in a standard import. if you use Gisgraphy for errors correction, set it to true.
Even if you want to do errors correction, and set it to false, you can see the reported errors in log files and fix them at the end of the import. It can be easier to fix all the errors in one time.


Examples :
importerConfig.wrongNumberOfFieldsThrows=true
importerConfig.wrongNumberOfFieldsThrows=false


[top]

importerConfig.missingRequiredFieldThrows

Wether we should throws an exception and stop the import of data if a required field is missing. This option should be in lower case. It is recommended to set it to false in a standard import. If you use Gisgraphy for errors correction, set it to true.
Even if you want to do errors correction, and set it to false, you can see the reported errors in log files and fix them at the end of the import. It can be easier to fix all the errors in one time.


Examples :
importerConfig.missingRequiredFieldThrows=true
importerConfig.missingRequiredFieldThrows=false


[top]

importerConfig.acceptRegExString

List of regular expresions separated by ';' that determines the feature class / code to be imported. The default value is .* (all the feature class / code). The regular expressions must match featureClass.featureCode. The gisFeature which matches "A.ADM." (administrative divisions) and "A.PCL." (countries) regex are automaticaly imported. This option is case sensitive and the should be set in upper case because feature class / code are in upper case. imported (Administrative division and country).
Examples :
.* : import all gisfeatures, no matter their feature class / code
P[.]PPL[A-Z&&[^QW]];P[.]PPL$;P[.]STLMT$ : import Israeli settlements and all the cities except destroyed and abandoned city
V.FRST. : import all the forests
P[.]PPL[A-Z&&[^QW]];P[.]PPL$;P[.]STLMT$;V.FRST. : import Israeli settlements and all the cities except destroyed and abandoned city, and the forests


See http://download.geonames.org/export/dump/featureCodes.txt to have a full description of feature class / code or see what are the "feature codes" used in GeoNames ?


[top]

importerConfig.tryToDetectAdmIfNotFound

If this option is set to true : The importer will try to detect Adm for features if the AdmXcodes values does not correspond to a known Adm. set this option to true activate errors correction. If set to false errors correction is disabled and if no Adm is found for the AdmXcode, the feature will be linked to a null Adm.

This option is case sensitive and must be set in lower case. Example : There is an adm with level 2 which have adm1Code = 'A1' and adm2Code = 'B2' in the datastore, suppose there is a gisFeature which have Adm1code='A3' and Adm2Code='B2', Gisgraphy will detect an error because there is no Adm with those codes. so if this option is set to true, Gisgraphy will correct the error and will link the feature to the Adm with codes adm1Code = 'A1' and adm2Code = 'B2'. If if this option is set to false, Gisgraphy won't try to correct the error, put a warning message in logs, and links the Feature to a null Adm.
Examples :
importerConfig.tryToDetectAdmIfNotFound=true
importerConfig.tryToDetectAdmIfNotFound=false


[top]

importerConfig.syncAdmCodesWithLinkedAdmOnes

This option is a little bit difficult to understand. An example is often simpler than a big speech ;). First, there is a few little thing to know : a feature has the following properties:
FeatureId......Adm...Adm1Code...Adm2Code...Adm3Code...Adm4Code...adm1Name...Adm2Name...adm3Name...Adm4Name...
and an Adm is a feature too and has the same properties.
So a feature is linked to an administrative division (AKA : Adm). For performance reasons, the codes and names of the Adms are stored in the Feature itself too.
Now consider the example above : if there is an error the adm will not be the same as the Codes in The CSV files. this option allow to choose beetween two strategy : In other words if you want the importer to set the admXcode and admXnames with the CSV one : set this option to false. if you want those codes to be the same as the linked Adm : set it to true.
if you don't know what to do : set it to the recommended value : true. This option is case sensitive and must be set in lower case.
importerConfig.tryToDetectAdmIfNotFound and importerConfig.syncAdmCodesWithLinkedAdmOnes are orthogonal concepts


[top]

importerConfig.admXExtracterStrategyIfAlreadyExists

In order to import the Adm before the other features, Gisgraphy extract the Adm1, Adm2, Adm3 and Adm4 files. This option tells what to do if an AdmX file (determines with the importerConfig.admXFileName option) is already present in the importer.geonames.dir.This option is case sensitive. 3 options are available :
Examples :
importerConfig.adm3ExtracterStrategyIfAlreadyExists=reprocess
importerConfig.adm4ExtracterStrategyIfAlreadyExists=skip


[top]

importerConfig.adm1FileName

Specify the filename of the CSV file with Administrative division with level 1. Should normally be 'admin1Codes.txt'. This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.adm2FileName

Specify the filename of the CSV file with Administrative division with level 2. Should normally be 'admin2Codes.txt'. This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.adm3FileName

Specify the filename of the CSV file with Administrative division with level 3. Should normally be 'admin3Codes.txt'. This file name will be used to extract Adm with level 3.This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.adm4FileName

Specify the filename of the CSV file with Administrative division with level 4. Should normally be 'admin4Codes.txt'. This file name will be used to extract Adm with level 4.This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.languageFileName

Specify the filename of the CSV file with languages. should normally be 'iso-languagecodes.txt'. This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.countriesFileName

Specify the filename of the CSV file with countries information. Should normally be 'countries.txt'. This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.alternateNamesFileName

Specify the filename of the CSV file with languages. Should normally be 'alternateNames.txt'. This option is case sensitive if the underlaying file system is case sensitive

[top]

importerConfig.importGisFeatureEmbededAlternateNames

Some of the alternate names are provided in each country dump file and all the alternate names with languages and additionnal information are in a separated file name. The alternate names provided in the country files are incomplete. if you want to import the alternate names of the country files (faster but a lot of informations are lost) set this option to true, in that case the importerConfig.alternateNamesFileName will be ignored. if you want a full import with the alternatenames separated file set this option to false. This option is case sensitive and must be set in lowercase.
Examples :
importerConfig.importGisFeatureEmbededAlternateNames=true
importerConfig.importGisFeatureEmbededAlternateNames=false


[top]

fulltextsearch.maxConnectionsPerHost

Limits the numbers of connections to the SolR server per host. Recommended : 32.

[top]

fulltextsearch.maxTotalConnections

Limits the numbers of connections to the SolR server for all hosts. Recommended : 128.

[top]

geolocsearch.defaultGeolocSearchPlaceType

define the default placetype Class for the geoloc query. An empty or wrong value will search for any placetype by default. This option is case sensitive. and the placeType must be in the entity package
Examples :
geolocsearch.defaultGeolocSearchPlaceType=City
geolocsearch.defaultGeolocSearchPlaceType=
This name of the class should not ends with '.class' but is case sensitive.


[top]

Import failure

When an error occured during import. You have to:
Never re-run an import before cleaning the database and restart the web application, it will failed!!.

[top]

Full text service

[top]

Description


The full text service allows to search for features / places.
you can The search is case insensitive, use synonyms (Saint/st, ..), separator characters stripping, ...
[top]

Parameters

[top]

Web service

The full text web service use a servlet to wrap the Java API. It links web parameters to a fulltext query and output the results via HTTP.
All the parameters should be case insensitive. if you've got some problems with case, please notify a bug.
All the parameters should be encoded in UTF-8 and the URL MUST be encoded.


Here is a summary of the Web parameters mapping :
Parameter nameWeb parameter name
The searched textq
Start pagination indexfrom
End pagination indexto
Output formatformat
Language codelang
Output style verbositystyle
placetypeplacetype
country codecountry
indentindent

If you use a checkbox in a form to indent the results, the value will be "on" or "off", so for a simple use : the value of indent, for the fulltext web service can be "true" or "on".
Examples :
http://localhost:8080/fulltext/fulltextsearch?q=paris&from=1&to=10&format=xml&lang=fr&style=short&placetype=city&country=fr&indent=true

http://localhost:8080/fulltext/fulltextsearch?q=paris



Actually, the webservice limits the number of results to 10.

By default the fulltext service is mapped to /fulltext pattern but you can change it in the WEB-INF/web.xml



[top]

Output fields description

Here is a description of all the output fields :
FieldDescriptionAvailable from style
errorA String only present if an error occured (e.g : empty query)
The field 'error' appears in the path response/responseHeader/error
ERROR
feature_idA unique id that identify the featureSHORT
NameThe name of the featureSHORT
fully_qualified_nameA name of the form : (adm1Name et adm2Name are printed) Paris, Département de Ville-De-Paris, Ile-De-France, (FR)SHORT
placetypeThe place Type of the FeatureSHORT
country_codeThe ISO 3166 country codeSHORT
country_nameThe name of the country the features belongs toSHORT
zipcodeThe zipcode (only for city plactetype)SHORT
google_map_urlThe URL to get the location on Google MapMEDIUM
yahoo_map_urlThe URL to get the location on Yahoo MapMEDIUM
country_flag_urlThe relative URL to get the country flag imageMEDIUM
feature_classThe feature Class. More...MEDIUM
feature_codeThe feature Code. More...MEDIUM
populationHow many people lives in this featureMEDIUM
elevationElevation in metersMEDIUM
name_asciiThe ascii nameMEDIUM
timezoneThe timezone (e.g :Europe/Paris)MEDIUM
gtopo30Average elevation of 30'x30' (ca 900mx900m) area in metersMEDIUM
latThe latitude (north-south)MEDIUM
lngThe longitude (east-West)MEDIUM
adm1_codeThe internal code for the administrative division of level 1LONG
adm2_codeThe internal code for the administrative division of level 2LONG
adm3_codeThe internal code for the administrative division of level 3LONG
adm4_codeThe internal code for the administrative division of level 4LONG
adm1_nameThe name of the administrative division of level 1LONG
adm2_nameThe name of the administrative division of level 2LONG
adm3_nameThe name of the administrative division of level 3LONG
adm4_nameThe name of the administrative division of level 4LONG
name_alternateThe alternate names of the feature that without specific language codeLONG
name_alternate_languagecodeThe alternate names of the feature for this language CodeLONG
adm1_name_alternateThe alternate names of the administrative division of level 1 without specific language codeFULL
adm1_name_alternate_languagecodeThe alternatenames of the administrative division of level 1 for this language CodeFULL
adm2_name_alternateThe alternate names of the administrative division of level 2 without specific language codeFULL
adm2_name_alternate_languagecodeThe alternatenames of the administrative division of level 2 for this language CodeFULL
adm3_name_alternateThe alternate names of the administrative division of level 3 without specific language codeFULL
adm3_name_alternate_languagecodeThe alternatenames of the administrative division of level 3 for this language CodeFULL
adm4_name_alternateThe alternate names of the administrative division of level 4 without specific language codeFULL
adm4_name_alternate_languagecodeThe alternatenames of the administrative division of level 4 for this language CodeFULL
country_name_alternateThe alternate names of the country without specific language codeFULL
country_name_alternate_languagecodeThe alternate names of the country for this language CodeFULL


[top]

Java API

The fulltext API looks like this
			Pagination pagination = paginate().from(STARTINDEX).to(ENDINDEX);
			Output output = Output.withFormat(OUTPUTFORMAT)
					.withLanguageCode(LANGUAGECODE).withStyle(VERBOSITY)
					.WithIndentation();
					
			FulltextQuery fulltextQuery = new FulltextQuery("SEARCHEDTEXT",
					pagination, output, PLACETYPE.class, COUNTRYCODE);
			String result = fullTextSearchEngine.executeQueryToString(fulltextQuery);
Click on the UPPERCASE parameters above to see the description of the parameter.
Here is an example :
			Pagination pagination = paginate().from(1).to(10);
			Output output = Output.withFormat(OutputFormat.XML)
					.withLanguageCode("FR").withStyle(OutputStyle.SHORT)
					.WithIndentation();
			FulltextQuery fulltextQuery = new FulltextQuery("Paris Texas",
					pagination, output, City.class, "US");
			String result = fullTextSearchEngine.executeQueryToString(fulltextQuery);

You can output results to an OutputStream (useful for servlet use) or a String.
The API is thread safe.
It is possible to create a query directly from a HTTP servlet request
The methods are Designed with DSL (Domain Specific Language), and can be chained as in the example above.

[top]

Geolocalisation service

[top]

Description


The geolocalisation service allows to search for features around earth location.
you can
[top]

Parameters

[top]

Web service

The geolocalisation web service use a servlet to wrap the Java API. It links web parameters to a geoloc query and output the results via HTTP.
All the parameters should be case insensitive. if you've got some problems with case, please notify a bug.
All the parameters should be encoded in UTF-8 and the URL MUST be encoded.


Here is a summary of the Web parameters mapping :
Parameter nameWeb parameter name
Latitudelat
Longitudelng
Radiusradius
Start pagination indexfrom
End pagination indexto
Output formatformat
Placetypeplacetype
Indentindent

Examples :
http://localhost:8080/geoloc/findnearbylocation?lat=4.5&lng=5.7&radius=5000&from=1&to=10&format=xml&placetype=city&indent=true

http://localhost:8080/geoloc/findnearbylocation?lat=4.5&lng=5.7



Actually, the webservice limits the number of results to 10.

By default the geolocalisation service is mapped to /geoloc pattern but you can change it in the WEB-INF/web.xml



[top]

Output fields description

Here is a description of all the output fields :
FieldDescription
errorA String only present if an error occured (e.g : empty Latitude or longitude)
numFoundThe number of results display with this query (it takes the pagination into account)
QTimeThe execution time of the query in ms
distanceThe distance beetween the point and the gisFeature in meters
NameThe name of the feature
asciiNameThe ASCII name of the feature
feature_idA unique id that identify the featureSHORT
countryCodeThe ISO 3166 country code
google_map_urlThe URL to get the location on Google Map
country_flag_urlThe relative URL to get the country flag image
yahoo_map_urlThe URL to get the location on Yahoo Map
zipcodeThe zipcode (only for city plactetype)
featureClassThe feature Class. More...
featureCodeThe feature Code. More...
placeTypeThe Type of Feature see faq
populationHow many people lives in this feature
latThe latitude (north-south)
lngThe longitude (east-West)
adm1CodeThe internal code for the administrative division of level 1
adm2CcodeThe internal code for the administrative division of level 2
adm3CodeThe internal code for the administrative division of level 3
adm4CodeThe internal code for the administrative division of level 4
adm1NameThe name of the administrative division of level 1
adm2NameThe name of the administrative division of level 2
adm3NameThe name of the administrative division of level 3
adm4NameThe name of the administrative division of level 4
timezoneThe time zone (e.g : Europe/Paris)
gtopo30Average elevation of 30'x30' (ca 900mx900m) area in meters
elevationThe elevation in meters


[top]

Java API

The geoloc API looks like this
			Point point = GeolocHelper.createPoint(LONGITUDE, LATITUDE);
			Pagination pagination = paginate().from(STARTINDEX).to(ENDINDEX);
			Output output = Output.withFormat(OUTPUTFORMAT)
								  .WithIndentation();
			GeolocQuery query = new GeolocQuery(point,RADIUS,pagination,output,PLACETYPE.class);
			String results = geolocSearchEngine.executeQueryToString(query);
Click on the UPPERCASE parameters above to see the description of the parameter.
Here is an example :
			Point point = GeolocHelper.createPoint(-3.5F, 45F);
			Pagination pagination = paginate().from(1).to(10);
			Output output = Output.withFormat(OutputFormat.XML)
								  .WithIndentation();	
			GeolocQuery geolocQuery = new GeolocQuery(point,100000
					pagination, output, City.class);
			String result = geolocSearchEngine.executeQueryToString(geolocQuery);

The methods are Designed with DSL (Domain Specific Language), and can be chained as in the example above.


You can output results to an OutputStream (useful for servlet use) or a String.
The API is thread safe.
It is possible to create a query directly from a HTTP servlet request
[top]

Admin Interface

to access the admin interface :
[top]

Login - Password

You can insert the two default users with the provided script in the sql directory : insert_users.sql
There is two default users already set :
userpasswordprofileDescription
useruserROLE_USERuser with simple rights : can not admin other users, can only edit his profile, can not import data
adminadminROLE_ADMINuser with all rights : can admin other users and profiles, can edit options,can import data.

It is highly recommended to change the default users of the admin interface. To do so : You must login as 'admin' with password 'admin' or edit the 'insert_users.sql' file in the sql directory, set the users / passwords / roles, and run the script

[top]

Import data

To import data, you must log With a user with admin rights. Then go to the Administration menu -> Run importer and check the configuration. Click on the 'Run importer' link. a page with the import status will be display and refresh every minuts.
The importer process may takes more than 24 hours, depending on how much data you import and the machine the importer runs on. (some dumps will be soon availables)
because The admin inteface is based on Appfuse : If you have some questions about basic features of the admin interface, see Appfuse documentation
[top]

Screenshots

some screenshots are available here


[top]

Security

[top]

Default admin password


It is highly recommended to change the default users of the admin interface. To do so : You must login as 'admin' with password 'admin'

[top]

Protect webServices

Some users wants to restrict the solr engine to the host 'localhost' in order to disallow user to ask the SolR search engine directly. You can use a firewall and restrict the access of the Webapp with the following code
With Tomcat :
<Context path="/path/to/secret_files">
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127.0.0.1" deny=""/>
</Context>


With Jetty :
A server configuration-XML-file can look something like this:
<Configure class="org.mortbay.jetty.Server">
...
<Call name="addContext">
...
<Call name="addHandler">
<Arg>
<New class="IPAccessHandler">
<Set name="Standard">deny</Set>
<Set name="AllowIP">192.168.0.103</Set>
<Set name="AllowIP">192.168.0.100</Set>
</New>
</Arg>
</Call>


See more on http://www.jdocs.com/jetty/5.1.11.rc0/org/mortbay/http/handler/IPAccessHandler.html
[top]

Performance

[top]

Jmeter

Some Jmeter benchs are available (scripts and results) here.
[top]

Database optimisations

in order to have good performances it is recommended to use database indexes. as far as I know it is possible to tell Hibernate to create index but not possible to choose the type of index (BTREE,GIST, and so on) with annotations. so you must create your own index with the following code :
DROP  INDEX IF EXISTS locationindex ;

CREATE INDEX locationindex
  ON gisfeature
  USING gist
  ("location");

VACUUM FULL ANALYZE;


You can proceed for all the tables which have Geometry collumns.
A script named 'createGISTIndex.sql' is provided in the 'SQL' dir in the Gisgraphy distribution to create all the GIST indexes for all the tables

You will have GREATER performnance if you specify a placetype, if you search for placetype 'gisFeature', your query will be slower.

You can define the default Geoloc Placetype in the env file (in the Classpath) with the option defaultGeolocSearchPlaceType


You can use command line but PGAdmin could be a friendly way.

If you use Postgis 1.3.1 or greater you don't have to use the GIST indexes because they will automatically be used. More .

It is recommended to run :
VACUUM FULL ANALYZE;
on postgres, after an import
[top]

JVM optimisations

You will have better performances if you run Gisgraphy and the SolR server in two distinct JVM. To run solr in a separated JVM copy the solr Directory (default parameter) with the schema.xml, solrconfig.xml, the data directory, and so on to a SolR distribution and start it with java -jar start.jar (or an other way of your choice, that's the easier way). Then you can remove the solr.war from the Gisgraphy release and configure the fulltextsearch URL to point to the new Solr URL. It is also recommended to use the sun JVM (not the GCJ one) and to use the VMargs -server