/[projects]/dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java
ViewVC logotype

Diff of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2556 by torben, Fri May 22 11:22:56 2015 UTC revision 2758 by torben, Tue Oct 27 14:40:44 2015 UTC
# Line 27  import dk.daoas.daoadresseservice.beans. Line 27  import dk.daoas.daoadresseservice.beans.
27  import dk.daoas.daoadresseservice.beans.SearchResult;  import dk.daoas.daoadresseservice.beans.SearchResult;
28  import dk.daoas.daoadresseservice.beans.SearchResult.Status;  import dk.daoas.daoadresseservice.beans.SearchResult.Status;
29  import dk.daoas.daoadresseservice.db.DatabaseLayer;  import dk.daoas.daoadresseservice.db.DatabaseLayer;
30    import dk.daoas.daoadresseservice.util.DaoUtils;
31  import dk.daoas.daoadresseservice.util.DeduplicateHelper;  import dk.daoas.daoadresseservice.util.DeduplicateHelper;
32  import dk.daoas.daoadresseservice.util.NaturalOrderComparator;  import dk.daoas.daoadresseservice.util.NaturalOrderComparator;
33    
# Line 41  public class AddressSearch { Line 42  public class AddressSearch {
42                    
43          private DataStatisticsBean stats = new DataStatisticsBean();          private DataStatisticsBean stats = new DataStatisticsBean();
44                    
45          ServiceConfig config;          private DatabaseLayer db;
46            
47                    
48          StreetnameHelper levenshteinHelper;          StreetnameHelper levenshteinHelper;
49          StreetnameHelper googleHelper;          StreetnameHelper googleHelper;
50          StreetnameHelper osmHelper;          StreetnameHelper osmHelper;
51                    
52                    
53          public AddressSearch(ServiceConfig config) {          public AddressSearch(DatabaseLayer db, ServiceConfig config) {
54                  this.config = config;                  
55                    this.db = db;
56                                    
57                  levenshteinHelper = new LevenshteinStreetnameHelper( this );                  levenshteinHelper = new LevenshteinStreetnameHelper( this );
58                  googleHelper = new GoogleStreetnameHelper( config );                  googleHelper = new GoogleStreetnameHelper( config );
59                  osmHelper = new OSMStreetnameHelper( config );                  osmHelper = new OSMStreetnameHelper( config );
60          }          }
61                    
62            public Address getAddressSafe(int gadeid, String husnr)  throws Exception{
63                    SearchResult result = new SearchResult();
64                    
65                    Map<String,Address> gade = searchGadeidentAdresser.get(gadeid);
66                    
67                    if (gade == null) {
68                            throw new Exception("GadeID ikke fundet");
69                    }
70                    
71                    Address addr = gade.get("husnr");
72                    
73                    if (addr == null) {
74                            throw new Exception("Adresse ikke ikke fundet");
75                    }
76                                    
77                    return addr;
78            }
79            
80                    
81          public SearchResult search(String postnrStr, String adresse)  {          public SearchResult search(String postnrStr, String adresse)  {
82                                    
# Line 66  public class AddressSearch { Line 87  public class AddressSearch {
87                  SearchRequest request = new SearchRequest();                  SearchRequest request = new SearchRequest();
88                  SearchResult result = new SearchResult();                  SearchResult result = new SearchResult();
89                                    
   
                 String helperSearchKey = "";  
90                                    
91                  try {                  try {
92                          request.postnr = Short.parseShort(postnrStr);                          request.postnr = Short.parseShort(postnrStr);
# Line 110  public class AddressSearch { Line 129  public class AddressSearch {
129                  }                  }
130                                    
131                  // LookupStreetname er en indkapsling af alm + levenstein + google + osm                  // LookupStreetname er en indkapsling af alm + levenstein + google + osm
132                  Integer gadeident = lookupStretname(request, result, helperSearchKey);                  Integer gadeident = lookupStretname(request, result, true);
133                                    
134                                    
135                  /*                  /*
136                   * 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
137                   *                   *
138                   *Denne sektion er MEGET experimental da den øger antallet af kald til google/OSM væsentligt                   * <strike>Denne sektion er MEGET experimental da den øger antallet af kald til google/OSM væsentligt</strike>*/
139                  if (gadeident == null) {                  if (gadeident == null) {
140                            final int MAX_TRIES = 4;
141                            
142                          String vejnavnParts[] = request.vejnavn.split(" ");                          String vejnavnParts[] = request.vejnavn.split(" ");
143                                                    
144                          for (int i=1; i<=3 && i<vejnavnParts.length; i++) {                          for (int i=1; i<=MAX_TRIES && i<vejnavnParts.length; i++) {
145                                  String subVejnavn = DaoUtils.joinHelper(vejnavnParts, i);                                  String subVejnavn = DaoUtils.joinHelper(vejnavnParts, i);
146                                                                    
147                                  request.vejnavn = subVejnavn;                                  request.vejnavn = subVejnavn;
148                                  result.vasketVejnavn = AddressUtils.vaskVejnavn( request.vejnavn );                                  result.vasketVejnavn = AddressUtils.vaskVejnavn( request.vejnavn );
149                                                                    
150                                  gadeident = lookupStretname(request, result, helperSearchKey);                                  gadeident = lookupStretname(request, result, false);//prøv opslag MEN UDEN GOOGLE/OSM !!!
151                                                                    
152                                  //hvis vi fandt vejen ud fra substrengen                                  //hvis vi fandt vejen ud fra substrengen
153                                  if (gadeident != null) {                                  if (gadeident != null) {
# Line 137  public class AddressSearch { Line 158  public class AddressSearch {
158                                  request.vejnavn = result.splitResult.vej;                                  request.vejnavn = result.splitResult.vej;
159                                  result.vasketVejnavn = AddressUtils.vaskVejnavn( request.vejnavn );                                  result.vasketVejnavn = AddressUtils.vaskVejnavn( request.vejnavn );
160                          }                                                }                      
161                  }*/                  }
162                                    
163    
164                                    
# Line 188  public class AddressSearch { Line 209  public class AddressSearch {
209          }          }
210    
211    
212          private Integer lookupStretname(SearchRequest request, SearchResult result, String helperSearchKey) {          private Integer lookupStretname(SearchRequest request, SearchResult result, boolean useExternal) {
213                    String helperSearchKey = "";
214                    
215                  Integer gadeident =  request.streetNames.get(result.vasketVejnavn);                  Integer gadeident =  request.streetNames.get(result.vasketVejnavn);
216                                    
217                                    
# Line 207  public class AddressSearch { Line 230  public class AddressSearch {
230                                    
231                  // Brug OpenStreetMap før vi prøver google                  // Brug OpenStreetMap før vi prøver google
232                  // For google har en request limit, det har OSM ikke!                  // For google har en request limit, det har OSM ikke!
233                  if ( gadeident == null) {                  if ( gadeident == null && useExternal) {
234                          String vej = osmHelper.proposeStreetName(request, result);                                        String vej = osmHelper.proposeStreetName(request, result);              
235                          gadeident = helperWrapper(vej, request.streetNames, helperSearchKey);                          gadeident = helperWrapper(vej, request.streetNames, helperSearchKey);
236                  }                  }
237                                    
238                  if ( gadeident == null) {                  if ( gadeident == null && useExternal) {
239                          String vej = googleHelper.proposeStreetName(request, result);                                    String vej = googleHelper.proposeStreetName(request, result);          
240                          gadeident = helperWrapper(vej, request.streetNames, helperSearchKey);                          gadeident = helperWrapper(vej, request.streetNames, helperSearchKey);
241                  }                  }
# Line 247  public class AddressSearch { Line 270  public class AddressSearch {
270                  long start1 = System.currentTimeMillis();                  long start1 = System.currentTimeMillis();
271                  System.out.println("Build -- stage 1");                  System.out.println("Build -- stage 1");
272                                    
273                  alleAdresser = DatabaseLayer.getAllAdresses();                  alleAdresser = db.getAllAdresses();
274                                    
275                                    
276                  /* Mapper mellem db Row ID og adresse noden */                  /* Mapper mellem db Row ID og adresse noden */
# Line 298  public class AddressSearch { Line 321  public class AddressSearch {
321                  System.out.println("Build -- stage 2 alias tabel");                  System.out.println("Build -- stage 2 alias tabel");
322                                    
323                  int vaskCount = 0;                  int vaskCount = 0;
324                  List<AliasBean> aliasList = DatabaseLayer.getAliasList();                  List<AliasBean> aliasList = db.getAliasList();
325                  for (AliasBean alias : aliasList) {                  for (AliasBean alias : aliasList) {
326                          Map<String,Integer> postnrVeje = searchPostnrVejnavnGadeid.get(alias.postnr);                          Map<String,Integer> postnrVeje = searchPostnrVejnavnGadeid.get(alias.postnr);
327                                                    
# Line 335  public class AddressSearch { Line 358  public class AddressSearch {
358                  DeduplicateHelper<String> ruteHelper = new DeduplicateHelper<String>();                  DeduplicateHelper<String> ruteHelper = new DeduplicateHelper<String>();
359                  DeduplicateHelper<String> korelisteHelper = new DeduplicateHelper<String>();                  DeduplicateHelper<String> korelisteHelper = new DeduplicateHelper<String>();
360                                    
361                  List<ExtendedBean> extDao = DatabaseLayer.getExtendedAdresslist();                  List<ExtendedBean> extDao = db.getExtendedAdresslist();
362                  for (ExtendedBean eb : extDao) {                  for (ExtendedBean eb : extDao) {
363                                                    
364                          Address orgAddress = idAddressMap.get(eb.orgId);                                                  Address orgAddress = idAddressMap.get(eb.orgId);                        
# Line 409  public class AddressSearch { Line 432  public class AddressSearch {
432                  System.out.println("Build, stage3 elapsed: " + (start4-start3) );                  System.out.println("Build, stage3 elapsed: " + (start4-start3) );
433                  System.out.println("Build -- stage 4 - 100pct");                  System.out.println("Build -- stage 4 - 100pct");
434                                    
435                  Map<Short,HundredePctBean> hundredePct = DatabaseLayer.get100PctList();                  Map<Short,HundredePctBean> hundredePct = db.get100PctList();
436                  for (Address addr : alleAdresser) {                  for (Address addr : alleAdresser) {
437                          if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) {                                                  if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) {                        
438                                  continue;                                  continue;
# Line 452  public class AddressSearch { Line 475  public class AddressSearch {
475                                  stats.ikkeDaekketCount++;                                  stats.ikkeDaekketCount++;
476                          }                          }
477                  }                                }              
478                    stats.totalCount = alleAdresser.size();
479                                    
480                                    
481                  stats.elapsed = stop-start1;                              stats.elapsed = stop-start1;            
482                  stats.buildTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( new Date() );                  stats.buildTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( new Date() );
483                                    
484                    System.out.println("Build: totalCount: " + stats.totalCount);
485                  System.out.println("Build: direkteCount: " + stats.direkteCount);                  System.out.println("Build: direkteCount: " + stats.direkteCount);
486                  System.out.println("Build: extendedCount: " + stats.extendedCount);                  System.out.println("Build: extendedCount: " + stats.extendedCount);
487                  System.out.println("Build: hundredePctCount: " + stats.hundredePctCount);                  System.out.println("Build: hundredePctCount: " + stats.hundredePctCount);
# Line 471  public class AddressSearch { Line 496  public class AddressSearch {
496                  return stats;                  return stats;
497          }          }
498                    
499            public DatabaseLayer getDatabaseLayer() {
500                    return db;
501            }
502            
503          public void clear() {          public void clear() {
504                  searchPostnrVejnavnGadeid.clear();                  searchPostnrVejnavnGadeid.clear();
505                  searchGadeidentAdresser.clear();                  searchGadeidentAdresser.clear();
# Line 534  public class AddressSearch { Line 563  public class AddressSearch {
563                  return result;                  return result;
564          }          }
565                    
566            public List<Address> get100PctAddresses() {
567                    List<Address> result = new ArrayList<Address>(120000);
568                    for (Address a : alleAdresser) {
569                            if ( a.daekningsType == DaekningsType.DAEKNING_100PCT) {
570                                    result.add(a);
571                            }
572                    }
573                    Collections.sort(result );
574                    return result;
575            }
576            
577          ///////////////////////////////////////////////////////////          ///////////////////////////////////////////////////////////
578          private String calculateExtendedBkKoreliste(ExtendedBean eb, Address orgAddress, Address targetAddress) {          private String calculateExtendedBkKoreliste(ExtendedBean eb, Address orgAddress, Address targetAddress) {
579                  String inject;                  String inject;
# Line 581  public class AddressSearch { Line 621  public class AddressSearch {
621                  aliasSet.add(vejnavn.replace("st.", "store") );                  aliasSet.add(vejnavn.replace("st.", "store") );
622                                    
623                  aliasSet.add(vejnavn.replace("søndre", "sdr") );                  aliasSet.add(vejnavn.replace("søndre", "sdr") );
624                  aliasSet.add(vejnavn.replace("sdr", "søndre") );                  aliasSet.add(vejnavn.replace("sdr", "søndre") );              
625                    aliasSet.add(vejnavn.replace("sønder", "sdr") );
626                    aliasSet.add(vejnavn.replace("sdr", "sønder") );
627    
628                                    
629                  aliasSet.add(vejnavn.replace("nørre", "nr") );                  aliasSet.add(vejnavn.replace("nørre", "nr") );
# Line 617  public class AddressSearch { Line 659  public class AddressSearch {
659                  aliasSet.add(vejnavn.replace("john", "j") );                  aliasSet.add(vejnavn.replace("john", "j") );
660                  aliasSet.add(vejnavn.replace("thomas", "th") );                  aliasSet.add(vejnavn.replace("thomas", "th") );
661                  aliasSet.add(vejnavn.replace("thorvald", "th") );                  aliasSet.add(vejnavn.replace("thorvald", "th") );
662                    aliasSet.add(vejnavn.replace("frederik", "fr") );
663                    aliasSet.add(vejnavn.replace("frederiks", "fr") );
664                                    
665                                    
666                  aliasSet.add(vejnavn.replace("christian", "chr") );                  aliasSet.add(vejnavn.replace("christian", "chr") );
667                    aliasSet.add(vejnavn.replace("christians", "chr") );
668                  aliasSet.add(vejnavn.replace("kristian", "kr") );                  aliasSet.add(vejnavn.replace("kristian", "kr") );
669                    aliasSet.add(vejnavn.replace("kristians", "kr") );
670    
671                    aliasSet.add(vejnavn.replace("mylius", "myl") );
672                    aliasSet.add(vejnavn.replace("myl", "mylius") );
673                                    
674                                    
675                  // alternative stavninger                  // alternative stavninger
# Line 680  public class AddressSearch { Line 729  public class AddressSearch {
729                                    
730                  aliasSet.add(vejnavn.replace("plads", "pl") );                  aliasSet.add(vejnavn.replace("plads", "pl") );
731                  aliasSet.add(vejnavn.replace("vænget", "vænge") );                  aliasSet.add(vejnavn.replace("vænget", "vænge") );
732                    
733                    aliasSet.add(vejnavn.replace("boulevard", "blvd") );
734                    aliasSet.add(vejnavn.replace("blvd", "boulevard") );
735    
736                    aliasSet.add(vejnavn.replace("boulevard", "boule") );
737                    aliasSet.add(vejnavn.replace("boule", "boulevard") );
738                                    
739                    aliasSet.add(vejnavn.replace("kronborg", "krbg") ); //Krbg ladegårdsvej, 3000
740                    aliasSet.add(vejnavn.replace("krbg", "kronborg") );
741                                    
742                  // Opbyg æøå varianter over alle fundne aliaser                  // Opbyg æøå varianter over alle fundne aliaser
743                                    
# Line 729  public class AddressSearch { Line 786  public class AddressSearch {
786                    
787          public Set<Entry<String,Integer>> getVejnavne(short postnr) {          public Set<Entry<String,Integer>> getVejnavne(short postnr) {
788                  Map<String,Integer> map = searchPostnrVejnavnGadeid.get(postnr);                  Map<String,Integer> map = searchPostnrVejnavnGadeid.get(postnr);
789                  TreeMap<String,Integer> newMap = new TreeMap<String,Integer>();                  
790                  for (Entry<String,Integer> entry : map.entrySet() ) {                  TreeMap<String,Integer> newMap = new TreeMap<String,Integer>( map );//Lav et nyt TreeMap for at sikre sortering
                         newMap.put(entry.getKey(), entry.getValue());  
                 }  
791                                    
792                  return newMap.entrySet();                  return newMap.entrySet();
793          }          }

Legend:
Removed from v.2556  
changed lines
  Added in v.2758

  ViewVC Help
Powered by ViewVC 1.1.20