Changeset 5055 for TI01-discovery


Ignore:
Timestamp:
27/02/09 17:32:16 (10 years ago)
Author:
sdonegan
Message:

Add extra fields and functionality for more ordering operations (dataset name, datacentre, relevance etc etc)

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

    r5031 r5055  
    4848 
    4949        public static final String ORIGINAL_DOCUMENT_FILENAME = "original_document_filename"; 
     50         
     51        public static final String DATASET_NAME = "dataset_name"; 
     52         
     53        public static final String DATACENTRE_NAME = "datacentre_name"; 
     54         
     55        public static final String DATASET_METADATA_UPDATE_DATE = "dataset_metadata_update_date"; 
     56         
     57        public static final String DATASET_RESULTSET_POPULARITY = "resultset_count"; 
     58         
     59        public static final String DATASET_LINKED_POPULARITY = "access_count"; 
     60         
    5061 
    5162 
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/DiscoveryServiceSkeleton.java

    r5031 r5055  
    6363 
    6464        public static final String DATACENTRE_ORDER = "dataCentre"; 
    65  
     65         
     66        //add in extra ordering options 
     67        public static final String DATASET_ORDER = "datasetOrder"; 
     68         
     69        public static final String DATASET_UPDATE_ORDER = "datasetUpdateOrder"; 
     70         
     71        public static final String PROXIMITY_ORDER = "proximity"; 
     72         
     73        public static final String DATASET_RESULTSET_POPULARITY = "datasetResultsetPopularity"; 
     74         
     75        public static final String DATASET_LINKED_POPULARITY = "datasetLinkedPopularity";  
     76         
     77        //NOTE - when specifying text relevance ranking further parsing is required whether its a full text search 
     78        //       or using author or parameter ranking methods! 
     79        public static final String TEXT_RELEVANCE_ORDER = "textRelevance"; 
     80         
     81         
    6682        /** 
    6783         * Helper method for checking validity of a format 
     
    191207         */ 
    192208        private SearchAgent setupSearchAgent(DoSearchDocument request) throws DiscoveryWSException { 
     209                 
    193210                logger.info("Setting up search agent"); 
     211                 
    194212                discoveryserviceapi.SearchType requestContent = request.getDoSearch(); 
    195213                                 
     
    441459                        list.addListMember(DATE_ORDER); 
    442460                        list.addListMember(DATACENTRE_ORDER); 
     461                        list.addListMember(DATASET_LINKED_POPULARITY); 
     462                        list.addListMember(DATASET_RESULTSET_POPULARITY); 
     463                        list.addListMember(PROXIMITY_ORDER); 
     464                        list.addListMember(DATASET_UPDATE_ORDER); 
     465                        list.addListMember(DATASET_ORDER); 
     466                        list.addListMember(TEXT_RELEVANCE_ORDER); 
     467                         
    443468                } else if (requestContent.getListName().equals("scopeList")) { 
    444469                        list.addListMember("NERC"); 
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/SearchAgent.java

    r5031 r5055  
    469469         */ 
    470470        private String constructSearchQuery() { 
     471                 
    471472                logger.info("Creating search query"); 
    472473                logger.info("search term detected is: " + this.term); 
     
    476477                                + DBProperties.ORIGINAL_DOCUMENT_FILENAME + " FROM " 
    477478                                + DBProperties.ORIGINAL_DOCUMENT_TABLE + " "); 
     479                 
    478480                StringBuffer whereSqlCmd = new StringBuffer(); 
    479481 
    480482                String termColumn = null; 
     483                 
    481484                if (Utilities.isStringDefined(this.getTerm())) { 
    482                         termColumn = DBProperties.DOCUMENT_TS_VECTOR; // default column to 
    483                                                                                                                         // use - i.e. a full 
    484                                                                                                                         // text search 
     485                         
     486                        //default column to use - i.e. a full text search 
     487                         
     488                        termColumn = DBProperties.DOCUMENT_TS_VECTOR;  
     489                         
    485490                        // NB, if no term type provided, assume full text search 
    486491                        if (Utilities.isStringDefined(this.getTermType())) { 
     
    488493                                                + " type search"); 
    489494 
    490                                 if (this.getTermType().equals( 
    491                                                 DiscoveryServiceSkeleton.AUTHOR_TERM_TYPE)) { 
     495                                if (this.getTermType().equals(DiscoveryServiceSkeleton.AUTHOR_TERM_TYPE)) { 
    492496                                        termColumn = DBProperties.AUTHORS_TS_VECTOR; 
    493                                 } else if (this.getTermType().equals( 
    494                                                 DiscoveryServiceSkeleton.PARAMETER_TERM_TYPE)) { 
     497                                } else if (this.getTermType().equals(DiscoveryServiceSkeleton.PARAMETER_TERM_TYPE)) { 
    495498                                        termColumn = DBProperties.PARAMETERS_TS_VECTOR; 
    496499                                } 
     
    572575                                                + this.sdf.format(this.getDateRangeEnd().getTime()) 
    573576                                                + "')"); 
    574  
     577                                 
    575578                        } 
    576579                        appendWhereClause(whereSqlCmd, DBProperties.TEMPORAL_DATA_TABLE 
     
    598601                // add order by, and direction, if required 
    599602                logger.info("Adding ordering info to query"); 
     603                 
    600604                if (this.getOrderByField() != null) { 
    601605                        logger.info("- adding specified order by parameter"); 
    602                         if (isOrderedByDate()) { 
    603                                 logger.info("NB, refine date ordering: order by 'start_time'"); 
     606                         
     607                        if (isOrderedByDate() || (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATE_ORDER))) {                                 
     608                                // ORDER BY DATE 
     609                                logger.info("NB, refine ordering: order by 'start_time'"); 
    604610                                this.setOrderByField(DBProperties.START_TIME); 
    605                         } else if (this.getOrderByField().equals( 
    606                                         DiscoveryServiceSkeleton.DATACENTRE_ORDER)) { 
    607                                 // TODO: need to decide what this order by should actually be 
    608                                 // done on 
    609                                 // - i.e. on full name of org or just the ID - until this is 
    610                                 // done, just 
    611                                 // use the slight fudge here - otherwise will need to add an 
    612                                 // appropriate 
    613                                 // additional column in the DB to store this info 
    614                                 logger 
    615                                                 .info("NB, fudging datacentre order - order by discovery ID"); 
    616                                 this.setOrderByField(DBProperties.DISCOVERY_ID); 
    617                         } 
    618                         whereSqlCmd 
    619                                         .append(DBProperties.ORDERBY_STATEMENT 
    620                                                         + this.getOrderByField() + " " 
    621                                                         + this.getOrderByDirection()); 
     611                                 
     612                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATACENTRE_ORDER)) { 
     613                                // ORDER BY DATACENTRE 
     614                                logger.info("NB, refine  ordering: order by 'datacentre_name'"); 
     615                                this.setOrderByField(DBProperties.DATACENTRE_NAME); 
     616                                 
     617                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATASET_ORDER)) { 
     618                                // ORDER BY DATASET 
     619                                logger.info("NB, refine  ordering: order by 'dataset_name'"); 
     620                                this.setOrderByField(DBProperties.DATASET_NAME); 
     621                                 
     622                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATASET_UPDATE_ORDER)) { 
     623                                // ORDER BY DATASET LAST EDIT DATE 
     624                                logger.info("NB, refine  ordering: order by 'dataset_metadata_update_date'"); 
     625                                this.setOrderByField(DBProperties.DATASET_METADATA_UPDATE_DATE); 
     626                                 
     627                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATASET_RESULTSET_POPULARITY)) { 
     628                                // ORDER BY DATASET RESULTSET POPULARITY 
     629                                logger.info("NB, refine  ordering: order by 'resultset_count'"); 
     630                                this.setOrderByField(DBProperties.DATASET_RESULTSET_POPULARITY); 
     631                         
     632                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATASET_LINKED_POPULARITY)) { 
     633                                // ORDER BY DATASET INCLUDED LINK POPULARITY 
     634                                logger.info("NB, refine  ordering: order by 'access_count'"); 
     635                                this.setOrderByField(DBProperties.DATASET_LINKED_POPULARITY); 
     636                         
     637                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.TEXT_RELEVANCE_ORDER)) { 
     638                                // ORDER BY DATASET TEXT RELEVANCE 
     639                                logger.info("NB, refine  ordering: order by text relevance"); 
     640                                logger.warn("ORDER BY TEXT RELEVANCE EXPLICITLY SET, BUT DO NOTHING HERE AS IT IS DEFAULT BEHAVIOR!");  
     641                                logger.warn("(Will need to prevent it actually applying the getOrderBy in this instance!"); 
     642                                 
     643                        } else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.PROXIMITY_ORDER)) { 
     644                                // ORDER BY PROXIMITY 
     645                                 
     646                                //TODO how do we link this with existing linking stuff... 
     647                                //logger.info("NB, refine  ordering: order by 'datacentre_name'"); 
     648                                //this.setOrderByField(DBProperties.DATASET_NAME); 
     649                        } 
     650                         
     651                        if ((this.getOrderByField().equals(DiscoveryServiceSkeleton.TEXT_RELEVANCE_ORDER)) ||  
     652                        (this.getOrderByField().equals(DiscoveryServiceSkeleton.PROXIMITY_ORDER))){ 
     653                                logger.info("Ignoring order by text and proximity in this instance!"); 
     654                        } else { 
     655                                //Now append the orderby statement to the rest of the query 
     656                                whereSqlCmd.append(DBProperties.ORDERBY_STATEMENT + this.getOrderByField() + " " + this.getOrderByDirection()); 
     657                                 
     658                        } 
     659                         
    622660                } else if (termColumn != null) { 
     661                         
    623662                        // check if wildcard search being done 
    624663                        if (isPOSIXWildcardSeach()) { 
    625664                                logger.info("Ordering by filename"); 
    626665                                whereSqlCmd.append(DBProperties.ORDERBY_STATEMENT + " " 
    627                                                 + DBProperties.ORIGINAL_DOCUMENT_FILENAME + " " 
    628                                                 + this.getOrderByDirection()); 
     666                                + DBProperties.ORIGINAL_DOCUMENT_FILENAME + " "  
     667                                + this.getOrderByDirection()); 
     668                                 
    629669                        } else { 
    630670                                // use natural ordering of results according to statistics 
    631671                                // worked out by the text search facility, if appropriate 
    632672                                logger.info("- order according to rank of search result"); 
    633                                 whereSqlCmd 
    634                                                 .append(DBProperties.ORDERBY_STATEMENT + " ts_rank(" 
    635                                                                 + termColumn + ", query) " 
    636                                                                 + this.getOrderByDirection()); 
     673                                whereSqlCmd.append(DBProperties.ORDERBY_STATEMENT + " ts_rank(" 
     674                                + termColumn + ", query) " 
     675                                + this.getOrderByDirection()); 
     676                                 
    637677                        } 
    638678                } 
Note: See TracChangeset for help on using the changeset viewer.