@ -121,7 +121,6 @@ import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.client.solrj.util.ClientUtils ;
import org.apache.solr.common.SolrDocument ;
import org.apache.solr.common.SolrDocumentList ;
import org.apache.solr.common.SolrException ;
import org.apache.solr.common.params.FacetParams ;
@ -1035,8 +1034,6 @@ public final class Protocol
return - 1 ; // we cannot query solr only with word hashes, there is no clear text string
}
event . addExpectedRemoteReferences ( count ) ;
QueryResponse rsp = null ;
SolrDocumentList docList = null ;
final SolrQuery solrQuery = event . query . solrQuery ( ) ;
solrQuery . setStart ( offset ) ;
solrQuery . setRows ( count ) ;
@ -1061,16 +1058,15 @@ public final class Protocol
for ( YaCySchema field : snippetFields ) solrQuery . addHighlightField ( field . getSolrFieldName ( ) ) ;
boolean localsearch = target = = null | | target . equals ( event . peers . mySeed ( ) ) ;
SolrDocumentList docList = null ;
QueryResponse rsp = null ;
if ( localsearch ) {
// search the local index
try {
rsp = event . rankingProcess . getQuery ( ) . getSegment ( ) . fulltext ( ) . getSolr ( ) . query ( solrQuery ) ;
docList = rsp . getResults ( ) ;
} catch ( SolrException e ) {
Network . log . logInfo ( "SEARCH failed (solr, 1), localpeer (" + e . getMessage ( ) + ")" , e ) ;
return - 1 ;
} catch ( IOException e ) {
Network . log . logInfo ( "SEARCH failed (solr, 2), localpeer (" + e . getMessage ( ) + ")" , e ) ;
} catch ( Throwable e ) {
Network . log . logInfo ( "SEARCH failed (solr), localpeer (" + e . getMessage ( ) + ")" , e ) ;
return - 1 ;
}
} else {
@ -1080,8 +1076,8 @@ public final class Protocol
rsp = solrConnector . query ( solrQuery ) ;
docList = rsp . getResults ( ) ;
// no need to close this here because that sends a commit to remote solr which is not wanted here
} catch ( IOException e ) {
Network . log . logInfo ( "SEARCH failed (solr), Peer: " + target . getName ( ) + "/" + target . getPublicAddress ( ) + " (" + e . getMessage ( ) + ")" , e ) ;
} catch ( Throwable e ) {
Network . log . logInfo ( "SEARCH failed (solr), remote Peer: " + target . getName ( ) + "/" + target . getPublicAddress ( ) + " (" + e . getMessage ( ) + ")" , e ) ;
return - 1 ;
}
}
@ -1122,77 +1118,77 @@ public final class Protocol
// evaluate result
List < URIMetadataNode > container = new ArrayList < URIMetadataNode > ( ) ;
if ( docList . size ( ) = = 0 ) {
Network . log . logInfo ( "SEARCH (solr), returned 0 out of " + docList . getNumFound ( ) + " documents from " + ( target = = null ? "shard" : ( "peer " + target . hash + ":" + target . getName ( ) ) ) + " query = " + solrQuery . toString ( ) ) ;
} else { // create containers
Network . log . logInfo ( "SEARCH (solr), returned " + docList . size ( ) + " out of " + docList . getNumFound ( ) + " documents from " + ( target = = null ? "shard" : ( "peer " + target . hash + ":" + target . getName ( ) ) ) ) ;
int term = count ;
for ( final SolrDocument doc : docList ) {
if ( term - - < = 0 ) {
break ; // do not process more that requested (in case that evil peers fill us up with rubbish)
}
// get one single search result
if ( doc = = null ) {
continue ;
}
URIMetadataNode urlEntry = new URIMetadataNode ( doc ) ;
if ( blacklist . isListed ( BlacklistType . SEARCH , urlEntry ) ) {
if ( Network . log . isInfo ( ) ) {
if ( localsearch ) {
Network . log . logInfo ( "local search (solr): filtered blacklisted url " + urlEntry . url ( ) ) ;
} else {
Network . log . logInfo ( "remote search (solr): filtered blacklisted url " + urlEntry . url ( ) + " from " + ( target = = null ? "shard" : ( "peer " + target . hash + ":" + target . getName ( ) ) ) ) ;
}
}
continue ; // block with blacklist
}
if ( docList = = null | | docList . size ( ) = = 0 ) {
Network . log . logInfo ( "SEARCH (solr), returned 0 out of 0 documents from " + ( target = = null ? "shard" : ( "peer " + target . hash + ":" + target . getName ( ) ) ) + " query = " + solrQuery . toString ( ) ) ;
return 0 ;
}
Network . log . logInfo ( "SEARCH (solr), returned " + docList . size ( ) + " out of " + docList . getNumFound ( ) + " documents from " + ( target = = null ? "shard" : ( "peer " + target . hash + ":" + target . getName ( ) ) ) ) ;
int term = count ;
for ( final SolrDocument doc : docList ) {
if ( term - - < = 0 ) {
break ; // do not process more that requested (in case that evil peers fill us up with rubbish)
}
// get one single search result
if ( doc = = null ) {
continue ;
}
URIMetadataNode urlEntry = new URIMetadataNode ( doc ) ;
final String urlRejectReason = Switchboard . getSwitchboard ( ) . crawlStacker . urlInAcceptedDomain ( urlEntry . url ( ) ) ;
if ( urlRejectReason ! = null ) {
if ( Network . log . isInfo ( ) ) {
if ( localsearch ) {
Network . log . logInfo ( "local search (solr): rejected url '" + urlEntry . url ( ) + "' (" + urlRejectReason + ")" ) ;
} else {
Network . log . logInfo ( "remote search (solr): rejected url '" + urlEntry . url ( ) + "' (" + urlRejectReason + ") from peer " + target . getName ( ) ) ;
}
if ( blacklist . isListed ( BlacklistType . SEARCH , urlEntry ) ) {
if ( Network . log . isInfo ( ) ) {
if ( localsearch ) {
Network . log . logInfo ( "local search (solr): filtered blacklisted url " + urlEntry . url ( ) ) ;
} else {
Network . log . logInfo ( "remote search (solr): filtered blacklisted url " + urlEntry . url ( ) + " from " + ( target = = null ? "shard" : ( "peer " + target . hash + ":" + target . getName ( ) ) ) ) ;
}
continue ; // reject url outside of our domain
}
continue ; // block with blacklist
}
// passed all checks, store url
if ( ! localsearch ) {
try {
event . query . getSegment ( ) . fulltext ( ) . putDocument ( ClientUtils . toSolrInputDocument ( doc ) ) ;
ResultURLs . stack (
ASCII . String ( urlEntry . url ( ) . hash ( ) ) ,
urlEntry . url ( ) . getHost ( ) ,
event . peers . mySeed ( ) . hash . getBytes ( ) ,
UTF8 . getBytes ( target . hash ) ,
EventOrigin . QUERIES ) ;
} catch ( final IOException e ) {
Network . log . logWarning ( "could not store search result" , e ) ;
continue ; // db-error
final String urlRejectReason = Switchboard . getSwitchboard ( ) . crawlStacker . urlInAcceptedDomain ( urlEntry . url ( ) ) ;
if ( urlRejectReason ! = null ) {
if ( Network . log . isInfo ( ) ) {
if ( localsearch ) {
Network . log . logInfo ( "local search (solr): rejected url '" + urlEntry . url ( ) + "' (" + urlRejectReason + ")" ) ;
} else {
Network . log . logInfo ( "remote search (solr): rejected url '" + urlEntry . url ( ) + "' (" + urlRejectReason + ") from peer " + target . getName ( ) ) ;
}
}
// add the url entry to the word indexes
container . add ( urlEntry ) ;
continue ; // reject url outside of our domain
}
if ( localsearch ) {
event . add ( container , facets , snippets , true , "localpeer" , ( int ) docList . getNumFound ( ) ) ;
event . rankingProcess . addFinalize ( ) ;
event . addExpectedRemoteReferences ( - count ) ;
Network . log . logInfo ( "local search (solr): localpeer sent " + container . get ( 0 ) . size ( ) + "/" + docList . size ( ) + " references" ) ;
} else {
event . add ( container , facets , snippets , false , target . getName ( ) + "/" + target . hash , ( int ) docList . getNumFound ( ) ) ;
event . rankingProcess . addFinalize ( ) ;
event . addExpectedRemoteReferences ( - count ) ;
Network . log . logInfo ( "remote search (solr): peer " + target . getName ( ) + " sent " + container . get ( 0 ) . size ( ) + "/" + docList . size ( ) + " references" ) ;
// passed all checks, store url
if ( ! localsearch ) {
try {
event . query . getSegment ( ) . fulltext ( ) . putDocument ( ClientUtils . toSolrInputDocument ( doc ) ) ;
ResultURLs . stack (
ASCII . String ( urlEntry . url ( ) . hash ( ) ) ,
urlEntry . url ( ) . getHost ( ) ,
event . peers . mySeed ( ) . hash . getBytes ( ) ,
UTF8 . getBytes ( target . hash ) ,
EventOrigin . QUERIES ) ;
} catch ( final IOException e ) {
Network . log . logWarning ( "could not store search result" , e ) ;
continue ; // db-error
}
}
}
// add the url entry to the word indexes
container . add ( urlEntry ) ;
}
if ( localsearch ) {
event . add ( container , facets , snippets , true , "localpeer" , ( int ) docList . getNumFound ( ) ) ;
event . rankingProcess . addFinalize ( ) ;
event . addExpectedRemoteReferences ( - count ) ;
Network . log . logInfo ( "local search (solr): localpeer sent " + container . get ( 0 ) . size ( ) + "/" + docList . size ( ) + " references" ) ;
} else {
event . add ( container , facets , snippets , false , target . getName ( ) + "/" + target . hash , ( int ) docList . getNumFound ( ) ) ;
event . rankingProcess . addFinalize ( ) ;
event . addExpectedRemoteReferences ( - count ) ;
Network . log . logInfo ( "remote search (solr): peer " + target . getName ( ) + " sent " + container . get ( 0 ) . size ( ) + "/" + docList . size ( ) + " references" ) ;
}
return docList . size ( ) ;
}