我在通过Solrj(运行Tomcat)在我的25文档Solr(3.6)索引中选择所有内容时遇到问题。
public static void main(String[] args) throws MalformedURLException, SolrServerException {
SolrServer solr = new HttpSolrServer("http://localhost:8080/solr");
ModifiableSolrParams parameters = new ModifiableSolrParams();
parameters.set("?q", "*:*");
parameters.set("wt", "json");
QueryResponse response = solr.query(parameters);
System.out.println(response);
}
我得到的结果是:
{responseHeader={status=0,QTime=0,params={?q=*:*,wt=javabin,version=2}},response={numFound=0,start=0,docs=[]}}
另外,如果我拿“?”超出parameters.set("?q", "*:*");
我必须终止编译,否则它会超时。如果我替换
"*:*"
只是
"*"
另外,我试过parameters.set("qt", "/select");
无济于事。
如何通过Solrj选择所有并实际获得结果?
答案 0 :(得分:2)
我不确定为什么会这样有效但是在失败了一百个想法之后,这个想法:
public static void main(String[] args) throws MalformedURLException, SolrServerException {
SolrServer solr = new HttpSolrServer("http://localhost:8080/solr");
ModifiableSolrParams parameters = new ModifiableSolrParams();
parameters.set("q", "*:*"); //query everything thanks to user1452132!
parameters.set("facet", true);//without this I cant select all
parameters.set("fl", "id");//send back just the id values
parameters.set("wt", "json");//Id like this in json format please
QueryResponse response = solr.query(parameters);
System.out.println(response);
}
希望这可以帮助那些人。
答案 1 :(得分:1)
您应该使用“q”作为参数,以下是正确的语法。
parameters.set("?q", "*:*");
它以“?q”返回的原因是没有查询要运行,因此返回快速。
首先,请通过浏览器进行测试。您还可以设置要返回的行数,以便不返回大的结果集。
parameters.set("rows", 5);
一旦solr查询返回,您必须对结果进行分页。如果你有一个大型集合,你将无法一次性检索所有这些。
答案 2 :(得分:0)
我认为你应该在引用SolrServer对象时尝试指定你的核心,即写
SolrServer solr = new HttpSolrServer("http://localhost:8080/solr/collection1");
其中collection1是您要使用的核心名称。