]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge branch 'master' of github.com:twain47/Nominatim
authorBrian Quinion <openstreetmap@brian.quinion.co.uk>
Tue, 15 May 2012 01:06:12 +0000 (03:06 +0200)
committerBrian Quinion <openstreetmap@brian.quinion.co.uk>
Tue, 15 May 2012 01:06:12 +0000 (03:06 +0200)
module/Makefile
sql/functions.sql
sql/indices.src.sql
sql/tables.sql
utils/setup.php

index 0fdb2daa46a78c09346636f673f951b1ffeeb6cd..12d66b636563e3b0ffb3781f0d1c052808206993 100644 (file)
@@ -2,3 +2,5 @@ MODULES = nominatim
 PGXS := $(shell pg_config --pgxs)
 include $(PGXS)
 
+all:
+       chmod 755 nominatim.so
index ca7f8c857798f7f2f157467a1344a50b2f2d0884..8eaf3925546945a26f0ff8a08f774c26c7dc4724 100644 (file)
@@ -389,7 +389,7 @@ BEGIN
   result := '{}'::INTEGER[];
 
   s := make_standard_name(src);
-  w := getorcreate_name_id(s);
+  w := getorcreate_name_id(s, src);
 
   IF NOT (ARRAY[w] <@ result) THEN
     result := result || w;
@@ -407,6 +407,30 @@ BEGIN
     END LOOP;
   END IF;
 
+  words := regexp_split_to_array(src, E'[,;()]');
+  IF array_upper(words, 1) != 1 THEN
+    FOR j IN 1..array_upper(words, 1) LOOP
+      s := make_standard_name(words[j]);
+      IF s != '' THEN
+        w := getorcreate_word_id(s);
+        IF NOT (ARRAY[w] <@ result) THEN
+          result := result || w;
+        END IF;
+      END IF;
+    END LOOP;
+  END IF;
+
+  s := regexp_replace(src, '市$', '');
+  IF s != src THEN
+    s := make_standard_name(s);
+    IF s != '' THEN
+      w := getorcreate_name_id(s, src);
+      IF NOT (ARRAY[w] <@ result) THEN
+        result := result || w;
+      END IF;
+    END IF;
+  END IF;
+
   RETURN result;
 END;
 $$
index d6a1f08f2aae886cb4b6e317d77a0a69c92331c3..70776f99c9beb4004229a25ab2b86488b3d1b936 100644 (file)
@@ -1,6 +1,10 @@
+-- Indices used only during search and update.
+-- These indices are created only after the indexing process is done.
+
 CREATE INDEX idx_word_word_id on word USING BTREE (word_id);
 
-CREATE INDEX searchnameplacesearch_search_nameaddress_vector_idx ON search_name USING GIN (nameaddress_vector) WITH (fastupdate = off);
+CREATE INDEX idx_search_name_nameaddress_vector ON search_name USING GIN (nameaddress_vector) WITH (fastupdate = off);
+CREATE INDEX idx_search_name_name_vector ON search_name USING GIN (name_vector) WITH (fastupdate = off);
 CREATE INDEX idx_search_name_centroid ON search_name USING GIST (centroid);
 
 CREATE INDEX idx_place_addressline_address_place_id on place_addressline USING BTREE (address_place_id);
@@ -21,6 +25,5 @@ CREATE INDEX idx_search_name_country_centroid ON search_name_country USING GIST
 CREATE INDEX idx_search_name_country_nameaddress_vector ON search_name_country USING GIN (nameaddress_vector) WITH (fastupdate = off);
 
 -- start
-CREATE INDEX idx_search_name_-partition-_nameaddress_vector ON search_name_-partition- USING GIN (nameaddress_vector) WITH (fastupdate = off);
 CREATE INDEX idx_location_property_-partition-_centroid ON location_property_-partition- USING GIST (centroid);
 -- end
index 48740f232963b03da072233e75e29fefd01ca8e1..ac4d0956536f4e5ff8db6778577cd73e39a97674 100644 (file)
@@ -138,7 +138,6 @@ SELECT AddGeometryColumn('search_name_blank', 'centroid', 4326, 'GEOMETRY', 2);
 drop table IF EXISTS search_name;
 CREATE TABLE search_name () INHERITS (search_name_blank);
 CREATE INDEX idx_search_name_place_id ON search_name USING BTREE (place_id);
-CREATE INDEX search_name_name_vector_idx ON search_name USING GIN (name_vector) WITH (fastupdate = off);
 
 drop table IF EXISTS place_addressline;
 CREATE TABLE place_addressline (
index 81ed3512a7535ff6b8890c1d1b4fd71624412abb..8254b6cc974440f7d962c787b7f7e160b912e207 100755 (executable)
                if (!pg_query($oDB->connection, 'CREATE SEQUENCE seq_place start 100000')) fail(pg_last_error($oDB->connection));
                echo '.';
 
+               // pre-create the word list
+               if (!pg_query($oDB->connection, 'select count(make_keywords(v)) from (select distinct svals(name) as v from place) as w where v is not null;')) fail(pg_last_error($oDB->connection));
+               echo '.';
+               if (!pg_query($oDB->connection, 'select count(make_keywords(v)) from (select distinct postcode as v from place) as w where v is not null;')) fail(pg_last_error($oDB->connection));
+               echo '.';
+               if (!pg_query($oDB->connection, 'select count(getorcreate_housenumber_id(v)) from (select distinct housenumber as v from place where housenumber is not null) as w;')) fail(pg_last_error($oDB->connection));
+               echo '.';
+
                $aDBInstances = array();
                for($i = 0; $i < $iInstances; $i++)
                {
                $sOutputFile = '';
                if (isset($aCMDResult['index-output'])) $sOutputFile = ' -F '.$aCMDResult['index-output'];
                $sBaseCmd = CONST_BasePath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -t '.$iInstances.$sOutputFile;
-               passthru($sBaseCmd.' -R 4');
-               pgsqlRunScript('ANALYSE');
-               passthru($sBaseCmd.' -r 5 -R 25');
-               pgsqlRunScript('ANALYSE');
-               passthru($sBaseCmd.' -r 26');
+               passthru($sBaseCmd);
        }
 
        if ($aCMDResult['create-search-indices'] || $aCMDResult['all'])