X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/114cc776be066443c95b576eedd8011fb92a2c59..b427fc79656124cd91475ac26016f5865fbc04f3:/settings/flex-base.lua?ds=sidebyside diff --git a/settings/flex-base.lua b/settings/flex-base.lua index 000d01f3..4d960d72 100644 --- a/settings/flex-base.lua +++ b/settings/flex-base.lua @@ -5,12 +5,18 @@ local module = {} local PRE_DELETE = nil local PRE_EXTRAS = nil +local POST_DELETE = nil local MAIN_KEYS = nil local NAMES = nil local ADDRESS_TAGS = nil local SAVE_EXTRA_MAINS = false local POSTCODE_FALLBACK = true +-- tables required for taginfo +module.TAGINFO_MAIN = {keys = {}, delete_tags = {}} +module.TAGINFO_NAME_KEYS = {} +module.TAGINFO_ADDRESS_KEYS = {} + -- The single place table. local place_table = osm2pgsql.define_table{ @@ -25,6 +31,8 @@ local place_table = osm2pgsql.define_table{ { column = 'extratags', type = 'hstore' }, { column = 'geometry', type = 'geometry', projection = 'WGS84', not_null = true }, }, + data_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_DATA"), + index_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_INDEX"), indexes = {} } @@ -231,7 +239,6 @@ function Place:write_row(k, v, save_extra_mains) end end - print(k, v) place_table:insert{ class = k, type = v, @@ -243,9 +250,9 @@ function Place:write_row(k, v, save_extra_mains) } if save_extra_mains then - for k, v in pairs(self.object.tags) do - if save_extra_mains(k, v) then - self.extratags[k] = nil + for tk, tv in pairs(self.object.tags) do + if save_extra_mains(tk, tv) then + self.extratags[tk] = nil end end end @@ -373,6 +380,17 @@ function module.tag_group(data) end end +-- Returns prefix part of the keys, and reject suffix matching keys +local function process_key(key) + if key:sub(1, 1) == '*' then + return nil + end + if key:sub(#key, #key) == '*' then + return key:sub(1, #key - 2) + end + return key +end + -- Process functions for all data types function module.process_node(object) @@ -466,14 +484,29 @@ function module.set_prefilters(data) PRE_DELETE = module.tag_match{keys = data.delete_keys, tags = data.delete_tags} PRE_EXTRAS = module.tag_match{keys = data.extra_keys, tags = data.extra_tags} + module.TAGINFO_MAIN.delete_tags = data.delete_tags end function module.set_main_tags(data) MAIN_KEYS = data + local keys = {} + for k, _ in pairs(data) do + table.insert(keys, k) + end + module.TAGINFO_MAIN.keys = keys end function module.set_name_tags(data) NAMES = module.tag_group(data) + + for _, lst in pairs(data) do + for _, k in ipairs(lst) do + local key = process_key(k) + if key ~= nil then + module.TAGINFO_NAME_KEYS[key] = true + end + end + end end function module.set_address_tags(data) @@ -481,8 +514,18 @@ function module.set_address_tags(data) POSTCODE_FALLBACK = data.postcode_fallback data.postcode_fallback = nil end - ADDRESS_TAGS = module.tag_group(data) + + for _, lst in pairs(data) do + if lst ~= nil then + for _, k in ipairs(lst) do + local key = process_key(k) + if key ~= nil then + module.TAGINFO_ADDRESS_KEYS[key] = true + end + end + end + end end function module.set_unused_handling(data) @@ -497,7 +540,7 @@ function module.set_unused_handling(data) end end -function set_relation_types(data) +function module.set_relation_types(data) module.RELATION_TYPES = {} for k, v in data do if v == 'multipolygon' then