![]() |
|||
SearchImpl.javaGo to the documentation of this file.00001 /* 00002 * SearchImpl.java 00003 * 00004 * Copyright (C) 2003 Alain MENSEGUEN 00005 * www.net2map.org 00006 * 00007 * This program is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU General Public License 00009 * as published by the Free Software Foundation; either version 2 00010 * of the License, or (at your option) any later version. 00011 * 00012 * This program is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00020 */ 00021 package org.net2map.pov.server; 00022 00023 import java.sql.*; 00024 import java.util.*; 00025 import java.rmi.*; 00026 import java.rmi.server.*; 00027 import java.util.LinkedList; 00028 00032 public class SearchImpl extends UnicastRemoteObject implements org.net2map.pov.server.Search 00033 { 00041 //public SearchImpl( ParameterSet params, DatabaseConnection con, WordList stopwords, AffixList affixes ) throws RemoteException 00042 public SearchImpl( ParameterSet params, DatabaseConnection con ) throws RemoteException 00043 { 00044 pParameters = params; 00045 cConnection = con; 00046 //wStopwords = stopwords; 00047 //pAffixes = affixes; 00048 this.reset(); 00049 } 00050 00055 public ResultList getResults() throws RemoteException 00056 { 00057 return rResults; 00058 } 00059 00064 /*public void setStopwords(WordList stopwords) throws RemoteException 00065 { 00066 wStopwords = stopwords; 00067 }*/ 00068 00073 /*public void setAffixes(AffixList affixes) throws RemoteException 00074 { 00075 pAffixes = affixes; 00076 }*/ 00077 00082 public long getTimeElapsed() throws RemoteException 00083 { 00084 return lTimeElapsed; 00085 } 00086 00087 private ParameterSet pParameters; 00088 //private WordList wStopwords; 00089 //private AffixList pAffixes; 00090 private DatabaseConnection cConnection; 00091 //private WordList wWords; 00092 //private boolean bIsNormalized; 00093 private QueryList qQueries; 00094 //private WordList wNormalized; 00095 //private WordList wFinalwords; 00096 //private ResultList rResults; 00097 private ResultListImpl rResults; 00098 //private DimensionSubsetList pDimensions; 00099 private DimensionSubsetListImpl pDimensions; 00100 private long lTimeElapsed; 00101 00107 public ResultList execute() throws RemoteException 00108 { 00109 Result result; 00110 Statement stid, sturl, stinfo; 00111 long urlid = 0, rating = 0; 00112 int i = 0; 00113 String squery = ""; 00114 String sfield = ""; 00115 java.util.Date dDate; 00116 System.out.println("SearchImpl.execute..."); 00117 00118 lTimeElapsed = System.currentTimeMillis(); 00119 00120 if ( qQueries.count() == 0 ) 00121 { 00122 buildQueries(); 00123 } 00124 00125 try { 00128 stid = cConnection.execute( qQueries.getQuery( "query_url_id" ).toString() ); 00129 00130 if ( pParameters.DEBUG > 1 ) 00131 { 00132 System.out.println( "\nStep 3 : Building results list..." ); 00133 } 00134 00135 while ( stid.getResultSet().next() ) 00136 { 00137 if ( pParameters.DEBUG > 2 ) 00138 { 00139 System.out.println( "\nBuilding result " + stid.getResultSet().getLong( 1 ) + "..."); 00140 } 00141 00142 urlid = stid.getResultSet().getLong( 1 ); 00143 00144 result = new ResultImpl( urlid ); 00145 00146 //System.out.println( "pDimensions.count() = " + pDimensions.count() ); 00147 00148 /*System.out.println( "BIT = " + java.sql.Types.BIT ); 00149 System.out.println( "TINYINT = " + java.sql.Types.TINYINT ); 00150 System.out.println( "SMALLINT = " + java.sql.Types.SMALLINT ); 00151 System.out.println( "INTEGER = " + java.sql.Types.INTEGER ); 00152 System.out.println( "BIGINT = " + java.sql.Types.BIGINT ); 00153 System.out.println( "FLOAT = " + java.sql.Types.FLOAT ); 00154 System.out.println( "REAL = " + java.sql.Types.REAL ); 00155 System.out.println( "DOUBLE = " + java.sql.Types.DOUBLE ); 00156 System.out.println( "NUMERIC = " + java.sql.Types.NUMERIC ); 00157 System.out.println( "DECIMAL = " + java.sql.Types.DECIMAL ); 00158 System.out.println( "CHAR = " + java.sql.Types.CHAR ); 00159 System.out.println( "VARCHAR = " + java.sql.Types.VARCHAR ); 00160 System.out.println( "LONGVARCHAR = " + java.sql.Types.LONGVARCHAR ); 00161 System.out.println( "DATE = " + java.sql.Types.DATE ); 00162 System.out.println( "TIME = " + java.sql.Types.TIME ); 00163 System.out.println( "TIMESTAMP = " + java.sql.Types.TIMESTAMP ); 00164 System.out.println( "BINARY = " + java.sql.Types.BINARY ); 00165 System.out.println( "VARBINARY = " + java.sql.Types.VARBINARY ); 00166 System.out.println( "LONGVARBINARY = " + java.sql.Types.LONGVARBINARY ); 00167 System.out.println( "NULL = " + java.sql.Types.NULL ); 00168 System.out.println( "OTHER = " + java.sql.Types.OTHER );*/ 00169 00170 for ( i = 0; i < pDimensions.count(); i++ ) 00171 { 00172 //System.out.println( "Dimension " + i + " : " + pDimensions.getSubset( i ).getOrderNb() + " : " + pDimensions.getSubset( i ).getSubsetQuery().toString() ); 00173 //System.out.println( "field name : " + stid.getResultSet().getMetaData().getColumnName( pDimensions.getSubset( i ).getOrderNb() + 1 ) ); 00174 //System.out.println( "type : " + stid.getResultSet().getMetaData().getColumnType( pDimensions.getSubset( i ).getOrderNb() + 1 ) ); 00175 switch ( stid.getResultSet().getMetaData().getColumnType( pDimensions.getSubset( i ).getOrderNb() + 1 ) ) 00176 { 00177 case java.sql.Types.BIT: 00178 break; 00179 case java.sql.Types.TINYINT: 00180 break; 00181 case java.sql.Types.SMALLINT: 00182 break; 00183 case java.sql.Types.INTEGER: 00184 case java.sql.Types.BIGINT: 00185 result.getDimensionValues().add( String.valueOf( stid.getResultSet().getLong( pDimensions.getSubset( i ).getOrderNb() + 1 ) ) ); 00186 break; 00187 case java.sql.Types.FLOAT: 00188 break; 00189 case java.sql.Types.REAL: 00190 break; 00191 case java.sql.Types.DOUBLE: 00192 result.getDimensionValues().add( String.valueOf( stid.getResultSet().getDouble( pDimensions.getSubset( i ).getOrderNb() + 1 ) ) ); 00193 break; 00194 case java.sql.Types.NUMERIC: 00195 break; 00196 case java.sql.Types.DECIMAL: 00197 break; 00198 case java.sql.Types.CHAR: 00199 break; 00200 case java.sql.Types.VARCHAR: 00201 result.getDimensionValues().add( stid.getResultSet().getString( pDimensions.getSubset( i ).getOrderNb() + 1 ) ); 00202 break; 00203 case java.sql.Types.LONGVARCHAR: 00204 break; 00205 case java.sql.Types.DATE: 00206 break; 00207 case java.sql.Types.TIME: 00208 break; 00209 case java.sql.Types.TIMESTAMP: 00210 break; 00211 case java.sql.Types.BINARY: 00212 break; 00213 case java.sql.Types.VARBINARY: 00214 break; 00215 case java.sql.Types.LONGVARBINARY: 00216 break; 00217 case java.sql.Types.NULL: 00218 break; 00219 case java.sql.Types.OTHER: 00220 break; 00221 default: 00222 break; 00223 } 00224 00225 if ( pParameters.DEBUG > 2 ) 00226 { 00227 System.out.println( "Adding dimension " + i + " : value : " + result.getDimensionValues().get( i ) ); 00228 } 00229 } 00230 00233 squery = pParameters.replace( qQueries.getQuery( "query_url" ).toString(), 00234 "%URL_IN%", 00235 String.valueOf( urlid ) ); 00236 00237 if ( pParameters.DEBUG > 2 ) 00238 { 00239 System.out.println( "Detailed url query " + urlid + " : " + squery ); 00240 } 00241 00242 sturl = cConnection.execute( squery ); 00243 00244 while ( sturl.getResultSet().next() ) 00245 { 00247 result.setDocSize( sturl.getResultSet().getLong( 1 ) ); 00248 dDate = new java.util.Date( sturl.getResultSet().getLong( 2 ) ); 00249 result.setLastModTime( dDate ); 00250 result.setPopRank( sturl.getResultSet().getDouble( 3 ) ); 00251 result.setURL( sturl.getResultSet().getString( 4 ) ); 00252 00253 if ( pParameters.DEBUG > 2 ) 00254 { 00255 System.out.println( "recid = " + String.valueOf( result.getRecID() ) ); 00256 System.out.println( "docsize = " + String.valueOf( result.getDocSize() ) ); 00257 System.out.println( "lastmodtime = " + result.getLastModTime().toString() ); 00258 System.out.println( "poprank = " + String.valueOf( result.getPopRank() ) ); 00259 System.out.println( "url = " + result.getUrl() ); 00260 } 00261 00265 squery = pParameters.replace( qQueries.getQuery( "query_url_info" ).toString(), 00266 "%URL_IN%", 00267 String.valueOf( urlid ) ); 00268 00269 if ( pParameters.DEBUG > 2 ) 00270 { 00271 System.out.println( "Detailed urlinfo query " + urlid + " : " + squery ); 00272 } 00273 00274 try 00275 { 00276 stinfo = cConnection.execute( squery ); 00277 00278 while ( stinfo.getResultSet().next() ) 00279 { 00280 sfield = stinfo.getResultSet().getString( 1 ); 00281 00284 if ( sfield.compareTo( "title" ) == 0 ) 00285 { 00286 result.setTitle( stinfo.getResultSet().getString( 2 ) ); 00287 } 00288 else if ( sfield.compareTo( "Content-Type" ) == 0 ) 00289 { 00290 result.setConType( stinfo.getResultSet().getString( 2 ) ); 00291 } 00292 else if ( sfield.compareTo( "Content-Language" ) == 0 ) 00293 { 00294 result.setConLanguage( stinfo.getResultSet().getString( 2 ) ); 00295 } 00296 else if ( sfield.compareTo( "Charset" ) == 0 ) 00297 { 00298 result.setCharSet( stinfo.getResultSet().getString( 2 ) ); 00299 } 00300 else if ( sfield.compareTo( "body" ) == 0 ) 00301 { 00302 result.setBody( stinfo.getResultSet().getString( 2 ) ); 00303 } 00304 } 00305 stinfo.close(); 00306 00307 if ( pParameters.DEBUG > 2 ) 00308 { 00309 System.out.println( "title = " + result.getTitle() ); 00310 System.out.println( "contype = " + result.getConType() ); 00311 System.out.println( "conlanguage = " + result.getConLanguage() ); 00312 System.out.println( "charset = " + result.getCharSet() ); 00313 System.out.println( "body = " + result.getBody() ); 00314 } 00315 00317 rResults.addResult( result ); 00318 } 00319 catch (Exception theException) 00320 { 00321 System.out.println("EXCEPTION: " + theException); 00322 } 00323 } 00324 sturl.getResultSet().close(); 00325 } 00326 stid.close(); 00327 } 00328 catch ( Exception e ) 00329 { 00330 if ( pParameters.DEBUG > 0 ) 00331 { 00332 System.out.println( "Error raised executing search: " + e); 00333 } 00334 //throw e; 00335 } 00336 00337 lTimeElapsed = System.currentTimeMillis() - lTimeElapsed; 00338 00339 if ( pParameters.DEBUG > 0 ) 00340 { 00341 System.out.println( "Results list built in " + ( (double)lTimeElapsed / 1000 ) + "s !" );//+ resid.getLong( 1 ) ); 00342 } 00343 00344 return rResults; 00345 } 00346 00353 public void buildQueries() throws RemoteException 00354 { 00355 Query qUrlId = new Query( pParameters ); 00356 Query qUrlInfo = new Query( pParameters ); 00357 Query qUrl = new Query( pParameters ); 00358 00359 //DimensionSubsetList dimTmp = new DimensionSubsetList(); 00360 int i, j; 00361 00362 if ( pParameters.DEBUG > 1 ) 00363 { 00364 System.out.println( "\nStep 1 : Parsing dimensions (" + pDimensions.count() + ")..." ); 00365 } 00366 00368 for ( i = 0; i < pDimensions.count(); i++ ) 00369 { 00370 pDimensions.getSubset( i ).buildSubset(); 00371 if ( qUrlId.isEmpty() ) 00372 { 00373 qUrlId = pDimensions.getSubset( i ).getSubsetQuery(); 00374 } 00375 else 00376 { 00377 qUrlId.joinTo( pDimensions.getSubset( i ).getSubsetQuery() ); 00378 } 00379 } 00380 00381 if ( pParameters.DEBUG > 0 ) 00382 { 00383 System.out.println( "Dimensions parsed!" ); 00384 } 00385 00386 if ( pParameters.DEBUG > 1 ) 00387 { 00388 System.out.println( "\nStep 2 : Building queries..." ); 00389 } 00390 00392 qUrlId.setName( "query_url_id" ); 00393 00394 if( pParameters.DEBUG > 2 ) 00395 { 00396 System.out.println( "qUrlId = " + qUrlId.toString() ); 00397 } 00398 00399 qUrl.setName( "query_url" ); 00400 qUrl.setSelect( "url.docsize, url.last_mod_time, url.pop_rank, url.url" + pParameters.getCatField() ); 00401 qUrl.setFrom( "url" ); 00402 qUrl.setWhere( "url.rec_id = %URL_IN%" ); 00403 00404 if( pParameters.DEBUG > 2 ) 00405 { 00406 System.out.println( "qUrl = " + qUrl.toString() ); 00407 } 00408 00409 qUrlInfo.setName( "query_url_info" ); 00410 qUrlInfo.setSelect( "urlinfo.sname, urlinfo.sval" ); 00411 qUrlInfo.setFrom( "urlinfo" ); 00412 qUrlInfo.setWhere( "urlinfo.url_id = %URL_IN%" ); 00413 00414 if( pParameters.DEBUG > 2 ) 00415 { 00416 System.out.println( "qUrlInfo = " + qUrlInfo.toString() ); 00417 } 00418 00419 qQueries.addQuery( qUrlId ); 00420 qQueries.addQuery( qUrl ); 00421 qQueries.addQuery( qUrlInfo ); 00422 00423 if( pParameters.DEBUG > 0 ) 00424 { 00425 System.out.println( "Queries built!" ); 00426 } 00427 } 00428 00433 public DimensionSubsetList getDimensions() throws RemoteException 00434 { 00435 return pDimensions; 00436 } 00437 00442 public void setDimensions(DimensionSubsetListImpl dim) throws RemoteException 00443 { 00444 pDimensions = dim; 00445 } 00446 00452 /*public void addDimensionDate(long from, long to) throws RemoteException 00453 { 00454 System.out.println("SearchImpl.addDimensionDate(from " + from + " to " + to + " )"); 00455 DimensionSubsetDate dDimension2 = new DimensionSubsetDate( from, to, pParameters ); 00456 pDimensions.addSubset( dDimension2 ); 00457 }*/ 00458 00464 /*public void addDimensionRank(double from, double to) throws RemoteException 00465 { 00466 System.out.println("SearchImpl.addDimensionRank(from " + from + " to " + to + " )"); 00467 DimensionSubsetRank dDimension3 = new DimensionSubsetRank( from, to, pParameters ); 00468 pDimensions.addSubset( dDimension3 ); 00469 }*/ 00470 00475 /*public void addDimensionWord(String expression) throws RemoteException 00476 { 00477 System.out.println("SearchImpl.addDimensionWord(\"" + expression + "\""); 00478 DimensionSubsetWord dDimension1 = new DimensionSubsetWord( expression, 00479 pParameters, 00480 cConnection, 00481 wStopwords, 00482 pAffixes ); 00483 pDimensions.addSubset( dDimension1 ); 00484 }*/ 00485 00489 public void reset() throws RemoteException 00490 { 00491 System.gc(); 00492 qQueries = new QueryList(); 00493 //wFinalwords = new WordList( pParameters ); 00494 pDimensions = new DimensionSubsetListImpl( pParameters, cConnection ); 00495 //bIsNormalized = false; 00496 rResults = new ResultListImpl( pParameters ); 00497 } 00498 00499 public DimensionSubsetList getDimensionSubsetList() throws RemoteException { 00500 return pDimensions; 00501 } 00502 } |
|||
|
Accueil | Téléchargement | Manuel
| Doc. technique | Sources CVS |
Faq | Nous contacter
©2003 - All Rights Reserved |
|||