Hi,
I'm using Solr server to develop a search service, and I encounter a problem
when trying to input a longer query string:
Here is the code:
StringBuffer stringBuffer = new StringBuffer();
... ...
try{
//search Pubmed server( a NCBI server ), it returns a list of IDs.
EFetchPubmedServiceStub service = new EFetchPubmedServiceStub();
EFetchPubmedServiceStub.EFetchRequest req = new
EFetchPubmedServiceStub.EFetchRequest();
req.setWebEnv( WebEnv );
req.setQuery_key( query_key );
req.setRetstart( "1110" );
// return 295 IDs
req.setRetmax( "295" );
EFetchPubmedServiceStub.EFetchResult res = service.run_eFetch( req
);
//connect returned IDs with " OR " and query my local Solr server
for( int i = 0; i <
res.getPubmedArticleSet().getPubmedArticleSetChoice().length; i++ ){
EFetchPubmedServiceStub.PubmedArticleType art =
res.getPubmedArticleSet().getPubmedArticleSetChoice()
[ i ].getPubmedArticle();
if( i > 0 ){
stringBuffer.append( " OR " );
}
stringBuffer.append( "( pmid:" +
art.getMedlineCitation().getPMID().getString() + " )" );
}
HttpSolrServer solrServer = new HttpSolrServer(
"http://127.0.0.1:8087/solr430/medline" );
String q = stringBuffer.toString();
//when input query has more 300 IDs, query will throw
org.apache.solr.client.solrj.SolrServerException: Server at
http://127.0.0.1:8087/solr430/medline returned non ok status:400, message:Bad
Request
QueryResponse solrRes = solrServer.query( new SolrQuery( q ) );
long found = solrRes.getResults().getNumFound();
System.out.println( found );
}
catch( Exception e ){
e.printStackTrace();
}
... ...
Do you think it's possible to change the query string length limit so that Solr
can accept more IDs?
Thanks.
-Gary