Hello all,
I'd like to get a stream of search results using the solrj.io package but
running into a small issue. It seems to have something to do with the
HttpClientUtil. I'm testing on SolrCloud 7.1.0, using the
sample_techproducts_configs configs, and indexed the manufacturers.xml file.
I'm following the test code in the method `testCloudSolrStreamWithZkHost`
found in StreamExpressionTest.java:
```
package ca.ryac.testing;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.solr.client.solrj.io.SolrClientCache;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.stream.CloudSolrStream;
import org.apache.solr.client.solrj.io.stream.StreamContext;
import org.apache.solr.client.solrj.io.stream.TupleStream;
import org.apache.solr.client.solrj.io.stream.expr.StreamExpression;
import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionParser;
import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
public class SolrStreamingClient {
String zkHost = "localhost:9983";
String COLLECTIONORALIAS = "gettingstarted";
public SolrStreamingClient() throws Exception {
init();
}
public static void main(String[] args) throws Exception {
new SolrStreamingClient();
}
private void init() throws Exception {
System.out.println(zkHost);
StreamFactory factory = new StreamFactory();
StreamExpression expression;
CloudSolrStream stream;
List tuples;
StreamContext streamContext = new StreamContext();
SolrClientCache solrClientCache = new SolrClientCache();
streamContext.setSolrClientCache(solrClientCache);
// basic test..
String expr = "search(" + COLLECTIONORALIAS + ", zkHost=\"" + zkHost
+ "\", q=*:*, fl=\"id,compName_s\", sort=\"compName_s asc\")";
System.out.println(expr);
expression = StreamExpressionParser.parse(expr);
stream = new CloudSolrStream(expression, factory);
stream.setStreamContext(streamContext);
tuples = getTuples(stream);
System.out.println(tuples.size());
}
protected List getTuples(TupleStream tupleStream) throws
IOException {
List tuples = new ArrayList();
try {
System.out.println("open stream..");
tupleStream.open();
for (Tuple t = tupleStream.read(); !t.EOF; t = tupleStream.read()) {
tuples.add(t);
}
} finally {
tupleStream.close();
}
return tuples;
}
}
```
And this is the output I get:
---
localhost:9983
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
details.
search(gettingstarted, zkHost="localhost:9983", q=*:*, fl="id,compName_s",
sort="compName_s asc")
open stream..
Exception in thread "main" java.lang.NoSuchMethodError:
org.apache.http.impl.client.HttpClientBuilder.evictIdleConnections(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/client/HttpClientBuilder;
at
org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:279)
at
org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:298)
at
org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:236)
at
org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:223)
at
org.apache.solr.client.solrj.impl.CloudSolrClient.(CloudSolrClient.java:276)
at
org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.build(CloudSolrClient.java:1525)
at
org.apache.solr.client.solrj.io.SolrClientCache.getCloudSolrClient(SolrClientCache.java:62)
at
org.apache.solr.client.solrj.io.stream.TupleStream.getShards(TupleStream.java:138)
at
org.apache.solr.client.solrj.io.stream.CloudSolrStream.constructStreams(CloudSolrStream.java:368)
at
org.apache.solr.client.solrj.io.stream.CloudSolrStream.open(CloudSolrStream.java:274)
at
ca.ryac.testing.SolrStreamingClient.getTuples(SolrStreamingClient.java:61)
at ca.ryac.testing.SolrStreamingClient.init(SolrStreamingClient.java:51)
at ca.ryac.testing.SolrStreamingClient.(SolrStreamingClient.java:22)
at ca.ryac.testing.SolrStreamingClient.main(SolrStreamingClient.java:26)
---
It's not finding or connecting to my SolrCloud instance, I can put
*anything* in zkHost and get the same results. Not really sure why it can't
find or connect to it. Any thoughts or ideas?
Thank you,
Ryan