Changeset 5561 for TI01-discovery


Ignore:
Timestamp:
05/08/09 12:32:06 (10 years ago)
Author:
sdonegan
Message:

Now succesfully handles problems with nulls when ordering, also offers ordering by dataset end date and discoveryIngest date

Location:
TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/DBProperties.java

    r5559 r5561  
    4747        // ORDER BY (case WHEN dataset_start_date_nom IS NULL then (select current_timestamp) ELSE (select min(dataset_start_date_nom) from original_document) END), dataset_start_date_nom 
    4848 
    49         public static final String START_TIME = "dataset_start_date_nom"; 
    50          
     49 
     50        //public static final String START_TIME = "start_time"; 
     51        public static final String START_TIME = "dataset_start_date_nom"; //use the start date column now in original_document for ordering by date..  
     52 
    5153        public static final String END_TIME = "dataset_end_date_nom"; 
    5254 
     
    7274         
    7375        public static final String DATASET_LINKED_POPULARITY = "access_count"; 
     76         
     77        public static final String DISCOVERY_INGEST_DATE = "create_date"; 
    7478         
    7579 
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/DiscoveryServiceSkeleton.java

    r5559 r5561  
    7171        public static final String DATASET_UPDATE_ORDER = "datasetUpdateOrder"; 
    7272         
     73        public static final String INGEST_ORDER = "discoveryIngestDate"; 
     74         
    7375        public static final String PROXIMITY_ORDER = "proximity"; 
    7476         
     
    7880         
    7981        public static final String DATASET_LINKED_POPULARITY = "datasetLinkedPopularity";  
     82         
     83         
    8084         
    8185        //NOTE - when specifying text relevance ranking further parsing is required whether its a full text search 
     
    485489                        // list.addListMember("moles"); 
    486490                } else if (requestContent.getListName().equals("orderByFieldList")) { 
     491                        list.addListMember(TEXT_RELEVANCE_ORDER); 
     492                        list.addListMember(DATASET_ORDER); 
    487493                        list.addListMember(DATE_ORDER_START); 
    488494                        list.addListMember(DATE_ORDER_END); 
     
    493499                        list.addListMember(PROXIMITY_NEARMISS_ORDER); 
    494500                        list.addListMember(DATASET_UPDATE_ORDER); 
    495                         list.addListMember(DATASET_ORDER); 
    496                         list.addListMember(TEXT_RELEVANCE_ORDER); 
     501                        list.addListMember(INGEST_ORDER);                                        
    497502                         
    498503                } else if (requestContent.getListName().equals("scopeList")) { 
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/SearchAgent.java

    r5559 r5561  
    355355 
    356356                // firstly prepare the search query string 
     357                 
     358                //due to problems with null results when ordering (date & spatial) need to split the results and merge to ensure null records always last                
    357359                String sqlQuery = constructSearchQuery(); 
    358  
     360                 
    359361                logger.info("Search sql: " + sqlQuery); 
    360362 
    361363                // now run the query using the db client configured appropriately 
    362364                InterfaceDBClient client = DBProperties.setupDBClient(); 
    363                 String[][] results = client.runQuery(sqlQuery); 
     365                String[][] results = client.runQuery(sqlQuery ); 
    364366                client.closeConnection(); 
    365367 
    366368                // now extract the results data 
    367                 result = processResults(results); 
     369                result = processResults(results);                                
    368370 
    369371                return result; 
     
    598600                } 
    599601 
    600                 if (isTemporalSearch() || isOrderedByDate()) { 
     602                if (isTemporalSearch()) { 
    601603                        logger.info("Adding temporal data to query"); 
    602604                        fromSqlCmd.append(", " + DBProperties.TEMPORAL_DATA_TABLE); 
     
    617619                                        + ".temporal_data_id"); 
    618620                } 
     621                 
     622                 
    619623 
    620624                // if either or both spatial and temporal data is searched on, need to 
    621625                // join this with the main 
    622626                // orig doc search query - NB, also need for date ordering 
    623                 if (isTemporalSearch() || isSpatialSearch() || isOrderedByDate()) { 
     627                if (isTemporalSearch() || isSpatialSearch()) { 
    624628                        fromSqlCmd.append(", " + DBProperties.SPATIAL_TEMPORAL_DATA_TABLE); 
    625629                        whereSqlCmd.append(" AND " 
     
    627631                                        + ".original_document_id = " 
    628632                                        + DBProperties.ORIGINAL_DOCUMENT_TABLE 
    629                                         + ".original_document_id"); 
    630                 } 
    631  
     633                                        + ".original_document_id");                      
     634                         
     635                } 
     636                  
     637                 
    632638                // add the WHERE statement, if required 
    633639                if (whereSqlCmd.length() > 0) 
     
    635641 
    636642                // add order by, and direction, if required 
    637                 logger.info("Adding ordering info to query"); 
     643                logger.info("Adding ordering info to query");  
    638644                 
    639645                if (this.getOrderByField() != null) { 
    640646                        logger.info("- adding specified order by parameter"); 
    641647                         
    642                         if (isOrderedByDate() || (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATE_ORDER_START))) {                           
     648                        if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATE_ORDER_START)) {                          
    643649                                // ORDER BY START DATE 
    644650                                logger.info("NB, refine ordering: order by 'start_time' (NB, using updated non null ordering..."); 
    645651                                //this.setOrderByField(DBProperties.START_TIME); 
    646652                                this.setOrderByField(DBProperties.nonNull_ORDERBY_STATEMENT_tstamp(DBProperties.START_TIME));                            
    647                                  
    648                         } else if (isOrderedByDate() || (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATE_ORDER_END)))  { 
     653                                                                 
     654                                 
     655                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATE_ORDER_END))  { 
    649656                                // ORDER BY END DATE 
    650657                                logger.info("NB, refine ordering: order by 'end_time' (NB, using updated non null ordering..."); 
     658                                 
    651659                                //this.setOrderByField(DBProperties.START_TIME); 
    652660                                this.setOrderByField(DBProperties.nonNull_ORDERBY_STATEMENT_tstamp(DBProperties.END_TIME));                              
     
    665673                                // ORDER BY DATASET LAST EDIT DATE 
    666674                                logger.info("NB, refine  ordering: order by 'dataset_metadata_update_date'"); 
    667                                 this.setOrderByField(DBProperties.DATASET_METADATA_UPDATE_DATE); 
     675                                //this.setOrderByField(DBProperties.DATASET_METADATA_UPDATE_DATE); 
     676                                this.setOrderByField(DBProperties.nonNull_ORDERBY_STATEMENT_tstamp(DBProperties.DATASET_METADATA_UPDATE_DATE));                          
     677                                 
     678                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.INGEST_ORDER)) { 
     679                                // ORDER BY DATASET LAST EDIT DATE 
     680                                logger.info("NB, refine  ordering: order by 'discovery ingest date'"); 
     681                                //this.setOrderByField(DBProperties.DATASET_METADATA_UPDATE_DATE); 
     682                                this.setOrderByField(DBProperties.nonNull_ORDERBY_STATEMENT_tstamp(DBProperties.DISCOVERY_INGEST_DATE));                                 
     683                                 
    668684                                 
    669685                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATASET_RESULTSET_POPULARITY)) { 
     
    717733                                //Now append the orderby statement to the rest of the query 
    718734                                whereSqlCmd.append(DBProperties.ORDERBY_STATEMENT + this.getOrderByField() + " " + this.getOrderByDirection()); 
     735                                                         
    719736                                 
    720737                        } 
     
    859876        private boolean isSpatialSearch() { 
    860877                logger.info("Checking if valid spatial data specified"); 
     878                //TODO - new MSI front end fudges the bbox so default limits are not returned even if map not set 
     879                //Fudge this for now! 
    861880                if (this.getLimitEast() != null && this.getLimitWest() != null 
    862881                                && this.getLimitNorth() != null && this.getLimitSouth() != null) { 
    863                         if (this.getLimitEast().intValue() == 180 
    864                                         && this.getLimitWest().intValue() == -180 
    865                                         && this.getLimitNorth().intValue() == 90 
    866                                         && this.getLimitSouth().intValue() == -90) { 
     882                        if (this.getLimitEast().intValue() >= 179  
     883                                        && this.getLimitWest().intValue() <= -179 
     884                                        && this.getLimitNorth().intValue() >= 89 
     885                                        && this.getLimitSouth().intValue() <= -89) { 
    867886                                logger.info("Spatial data is equivalent to global search - will ignore in search"); 
    868887                                return false; 
Note: See TracChangeset for help on using the changeset viewer.