--- dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java 2015/05/22 11:22:56 2556 +++ dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java 2015/10/27 14:40:44 2758 @@ -27,6 +27,7 @@ import dk.daoas.daoadresseservice.beans.SearchResult; import dk.daoas.daoadresseservice.beans.SearchResult.Status; import dk.daoas.daoadresseservice.db.DatabaseLayer; +import dk.daoas.daoadresseservice.util.DaoUtils; import dk.daoas.daoadresseservice.util.DeduplicateHelper; import dk.daoas.daoadresseservice.util.NaturalOrderComparator; @@ -41,21 +42,41 @@ private DataStatisticsBean stats = new DataStatisticsBean(); - ServiceConfig config; + private DatabaseLayer db; + StreetnameHelper levenshteinHelper; StreetnameHelper googleHelper; StreetnameHelper osmHelper; - public AddressSearch(ServiceConfig config) { - this.config = config; + public AddressSearch(DatabaseLayer db, ServiceConfig config) { + + this.db = db; levenshteinHelper = new LevenshteinStreetnameHelper( this ); googleHelper = new GoogleStreetnameHelper( config ); osmHelper = new OSMStreetnameHelper( config ); } + public Address getAddressSafe(int gadeid, String husnr) throws Exception{ + SearchResult result = new SearchResult(); + + Map gade = searchGadeidentAdresser.get(gadeid); + + if (gade == null) { + throw new Exception("GadeID ikke fundet"); + } + + Address addr = gade.get("husnr"); + + if (addr == null) { + throw new Exception("Adresse ikke ikke fundet"); + } + + return addr; + } + public SearchResult search(String postnrStr, String adresse) { @@ -66,8 +87,6 @@ SearchRequest request = new SearchRequest(); SearchResult result = new SearchResult(); - - String helperSearchKey = ""; try { request.postnr = Short.parseShort(postnrStr); @@ -110,23 +129,25 @@ } // LookupStreetname er en indkapsling af alm + levenstein + google + osm - Integer gadeident = lookupStretname(request, result, helperSearchKey); + Integer gadeident = lookupStretname(request, result, true); /* - * Hvis der ikke er direkte hits, prøver vi at skære op til 3 ord vejnavn + * Hvis der ikke er direkte hits, prøver vi at skære ord af vejnavn * - *Denne sektion er MEGET experimental da den øger antallet af kald til google/OSM væsentligt + * Denne sektion er MEGET experimental da den øger antallet af kald til google/OSM væsentligt*/ if (gadeident == null) { + final int MAX_TRIES = 4; + String vejnavnParts[] = request.vejnavn.split(" "); - for (int i=1; i<=3 && i aliasList = DatabaseLayer.getAliasList(); + List aliasList = db.getAliasList(); for (AliasBean alias : aliasList) { Map postnrVeje = searchPostnrVejnavnGadeid.get(alias.postnr); @@ -335,7 +358,7 @@ DeduplicateHelper ruteHelper = new DeduplicateHelper(); DeduplicateHelper korelisteHelper = new DeduplicateHelper(); - List extDao = DatabaseLayer.getExtendedAdresslist(); + List extDao = db.getExtendedAdresslist(); for (ExtendedBean eb : extDao) { Address orgAddress = idAddressMap.get(eb.orgId); @@ -409,7 +432,7 @@ System.out.println("Build, stage3 elapsed: " + (start4-start3) ); System.out.println("Build -- stage 4 - 100pct"); - Map hundredePct = DatabaseLayer.get100PctList(); + Map hundredePct = db.get100PctList(); for (Address addr : alleAdresser) { if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { continue; @@ -452,11 +475,13 @@ stats.ikkeDaekketCount++; } } + stats.totalCount = alleAdresser.size(); stats.elapsed = stop-start1; stats.buildTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( new Date() ); + System.out.println("Build: totalCount: " + stats.totalCount); System.out.println("Build: direkteCount: " + stats.direkteCount); System.out.println("Build: extendedCount: " + stats.extendedCount); System.out.println("Build: hundredePctCount: " + stats.hundredePctCount); @@ -471,6 +496,10 @@ return stats; } + public DatabaseLayer getDatabaseLayer() { + return db; + } + public void clear() { searchPostnrVejnavnGadeid.clear(); searchGadeidentAdresser.clear(); @@ -534,6 +563,17 @@ return result; } + public List
get100PctAddresses() { + List
result = new ArrayList
(120000); + for (Address a : alleAdresser) { + if ( a.daekningsType == DaekningsType.DAEKNING_100PCT) { + result.add(a); + } + } + Collections.sort(result ); + return result; + } + /////////////////////////////////////////////////////////// private String calculateExtendedBkKoreliste(ExtendedBean eb, Address orgAddress, Address targetAddress) { String inject; @@ -581,7 +621,9 @@ aliasSet.add(vejnavn.replace("st.", "store") ); aliasSet.add(vejnavn.replace("søndre", "sdr") ); - aliasSet.add(vejnavn.replace("sdr", "søndre") ); + aliasSet.add(vejnavn.replace("sdr", "søndre") ); + aliasSet.add(vejnavn.replace("sønder", "sdr") ); + aliasSet.add(vejnavn.replace("sdr", "sønder") ); aliasSet.add(vejnavn.replace("nørre", "nr") ); @@ -617,10 +659,17 @@ aliasSet.add(vejnavn.replace("john", "j") ); aliasSet.add(vejnavn.replace("thomas", "th") ); aliasSet.add(vejnavn.replace("thorvald", "th") ); + aliasSet.add(vejnavn.replace("frederik", "fr") ); + aliasSet.add(vejnavn.replace("frederiks", "fr") ); aliasSet.add(vejnavn.replace("christian", "chr") ); + aliasSet.add(vejnavn.replace("christians", "chr") ); aliasSet.add(vejnavn.replace("kristian", "kr") ); + aliasSet.add(vejnavn.replace("kristians", "kr") ); + + aliasSet.add(vejnavn.replace("mylius", "myl") ); + aliasSet.add(vejnavn.replace("myl", "mylius") ); // alternative stavninger @@ -680,7 +729,15 @@ aliasSet.add(vejnavn.replace("plads", "pl") ); aliasSet.add(vejnavn.replace("vænget", "vænge") ); - + + aliasSet.add(vejnavn.replace("boulevard", "blvd") ); + aliasSet.add(vejnavn.replace("blvd", "boulevard") ); + + aliasSet.add(vejnavn.replace("boulevard", "boule") ); + aliasSet.add(vejnavn.replace("boule", "boulevard") ); + + aliasSet.add(vejnavn.replace("kronborg", "krbg") ); //Krbg ladegårdsvej, 3000 + aliasSet.add(vejnavn.replace("krbg", "kronborg") ); // Opbyg æøå varianter over alle fundne aliaser @@ -729,10 +786,8 @@ public Set> getVejnavne(short postnr) { Map map = searchPostnrVejnavnGadeid.get(postnr); - TreeMap newMap = new TreeMap(); - for (Entry entry : map.entrySet() ) { - newMap.put(entry.getKey(), entry.getValue()); - } + + TreeMap newMap = new TreeMap( map );//Lav et nyt TreeMap for at sikre sortering return newMap.entrySet(); }