在solr连接java中遇到麻烦

时间:2017-04-15 10:50:25

标签: solr solrj

我尝试使用solr 6.5.0来连接java。我已将以下.jar文件添加到库中:

commons-io-2.5
httpclient-4.4.1
httpcore-4.4.1
httpmine-4.4.1
jcl-over-slf4j-1.7.7
noggit-0.6
slf4j-api-1.7.7
stax2-api-3.1.4
woodstox-core-asl-4.4.1
zookeeper-3.4.6
solr-solrj-6.5.0

但是当我尝试使用以下代码连接solr时:

import org.apache.http.impl.bootstrap.HttpServer;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;

public class SolrQuery {

  public static void main(String[] args) throws SolrServerException {
    HttpSolrServer solr = new HttpServer("http://localhost:8983/solr/collection1");
    SolrQuery query = new SolrQuery();
    query.setQuery("*"); 
    QueryResponse response = solr.query(query);
    SolrDocumentList results = response.getResults();
    for (int i = 0; i < results.size(); ++i) {
      System.out.println(results.get(i));
    }   
  }   
}

在编译之前,我在:

中出错了
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.SolrQuery;
HttpSolrServer solr = new HttpServer("http://localhost:8983/solr/collection1");

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我发现我需要导入一个.jar文件,该文件不包含在名为slf4j-simple-1.7.25的/ dist库中,并且

HttpSolrServer solr = new HttpServer("http://localhost:8983/solr/gettingstarted");
        SolrQuery query = new SolrQuery();

需要改为

 String urlString = "http://localhost:8983/solr/gettingstarted";
    SolrClient solr = new HttpSolrClient.Builder(urlString).build();

之后它终于可以运行!!!

答案 1 :(得分:2)

您的问题中的代码段是为了旧版本的Solr而编写的。 5.0。您将找到许多针对旧Solr版本编写的源代码和示例,但在大多数情况下,您只需使用新的SolrServer更改旧SolrClient类(现在更正) )课。

两者都是您要使用的Solr实例的表示。

阅读Solr Documentation - Using SolrJ

我热烈建议您不要在课程中使用与现有课程相同的名称(在您的示例中,您的课程名为SolrQuery)。

Solr查询的catch all字符串为*:*,表示:搜索所有可用字段的所有匹配项。因此,将语句query.setQuery更改为:

query.setQuery("*:*"); 

我认为您使用Solr客户端作为独立实例,因此,正如您已经知道的那样,实例SolrClient的正确方法是:

String urlString = "http://localhost:8983/solr/gettingstarted";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();

这是我建议迭代所有返回文档的更简单方法:

for (SolrDocument doc : response.getResults()) {
   System.out.println(doc);
}

查看SolrDocument类的文档,解释如何使用它并正确读取字段值。