6

您好,我尝试在我的 java 应用程序的 solr 中索引我的数据库中的一行。我已经添加了必要的罐子,但我不断收到这个错误。我的 solr 架构是正确的,我提出的请求只是向我的数据库添加新行,我希望它也被索引

这是错误

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.
Exception in thread "main" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
    at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175)
    at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158)
    at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448)
    at org.apache.solr.client.solrj.impl.HttpClientUtil.setFollowRedirects(HttpClientUtil.java:223)
    at org.apache.solr.client.solrj.impl.HttpClientConfigurer.configure(HttpClientConfigurer.java:58)
    at org.apache.solr.client.solrj.impl.HttpClientUtil.configureClient(HttpClientUtil.java:115)
    at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:105)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.<init>(HttpSolrServer.java:155)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.<init>(HttpSolrServer.java:128)
    at tan.indexSolr.<init>(indexSolr.java:195)
    at tan.indexSolr.main(indexSolr.java:51)

这是我的代码

    public class indexSolr {
    private  Connection conn = null;
    private static HttpSolrServer  server;
      private Collection docs = new ArrayList();
      private int _totalSql = 0;
      private long _start = System.currentTimeMillis();


    public static void main(String[] args) throws SolrServerException, IOException, SQLException
    { String url = "http://localhost:8983/solr/db";



  indexSolr idxer = new indexSolr(url);

  idxer.doSqlDocuments();

  idxer.endIndexing();




    }

    private void doSqlDocuments() throws SQLException {

        try {
            Class.forName("org.postgresql.Driver");

            conn = DriverManager.getConnection(
                    "jdbc:postgresql://localhost:5432/biz_cat",
                    "postgres", "pos");
            java.sql.Statement st = null;
           st = conn.createStatement();
           ResultSet rs =   st.executeQuery("select * from pl_biz order by id DESC LIMIT 1");

          while (rs.next()) {

            SolrInputDocument doc = new SolrInputDocument();

            Integer  id = rs.getInt("id");
            String name = rs.getString("name");
            String midname = rs.getString("midname");
            String lastname = rs.getString("lastname");
            String frlsname = rs.getString("frlsname");
            String biz_subject = rs.getString("biz_subject");
            String company_type = rs.getString("company_type");
            String obshtina = rs.getString("obshtina");
            String main_office_town = rs.getString("main_office_town");
            String address = rs.getString("address");
            String role = rs.getString("role");
            String country = rs.getString("country");
            String nace_code = rs.getString("nace_code");
            String nace_text = rs.getString("nace_text");
            String zip_code = rs.getString("zip_code");
            String phone = rs.getString("phone");
            String fax = rs.getString("fax");
            String email = rs.getString("email");
            String web = rs.getString("web");
            String location = rs.getString("location");
            String geohash = rs.getString("geohash");
            Integer popularity = rs.getInt("popularity");

            doc.addField("id", id);
            doc.addField("name", name);
            doc.addField("midname", midname);
            doc.addField("lastname", lastname);
            doc.addField("frlsname", frlsname);
            doc.addField("biz_subject", biz_subject);
            doc.addField("company_type", company_type);
            doc.addField("obshtina", obshtina);
            doc.addField("main_office_town", main_office_town);
            doc.addField("address", address);
            doc.addField("role", role);
            doc.addField("country", country);
            doc.addField("nace_code", nace_code);
            doc.addField("nace_text", nace_text);
            doc.addField("zip_code", zip_code);
            doc.addField("phone", phone);
            doc.addField("fax", fax);
            doc.addField("email", email);
            doc.addField("web", web);
            doc.addField("location", location);
            doc.addField("geohash", geohash);
            doc.addField("popularity", popularity);


            docs.add(doc);
             ++_totalSql;


            if (docs.size() > 1) {
                 // Commit within 5 minutes.
                UpdateResponse resp = server.add(docs);
                System.out.println (resp);
              if (resp.getStatus() != 0) {
                log("Some horrible error has occurred, status is: " +
                      resp.getStatus());
              }
              docs.clear();
            }
          }
        }
        catch (Exception ex)
        {
          ex.printStackTrace();
        }
        finally {
          if (conn != null) {
            conn.close();
          }
        }


    }

     private void endIndexing() throws IOException, SolrServerException {
            if (docs.size() > 0) { // Are there any documents left over?
              server.add(docs, 300000); // Commit within 5 minutes
            }
            try 
            {
            server.commit(); 

            }
            catch (Exception ex)
            {

                ex.printStackTrace();
            }


            long endTime = System.currentTimeMillis();
            log("Total Time Taken: " + (endTime - _start) +
                 " milliseconds to index " + _totalSql +
                " SQL rows" );
          }


          private static void log(String msg) {
            System.out.println(msg);
          }


          private indexSolr(String url) throws IOException, SolrServerException {
              // Create a multi-threaded communications channel to the Solr server.
          try {    
            server = new HttpSolrServer(url);

            server.setSoTimeout(1000);  // socket read timeout
            server.setConnectionTimeout(1000);
            server.setMaxRetries(1); 


          }
               catch (Exception ex)
               {

                   ex.printStackTrace();

               }
          }

}
4

1 回答 1

2

此答案取自 @Pace 于 2013 年 4 月 20 日发表的评论

我已将其标记为社区 wiki 帖子,正如Question 所建议的那样,没有答案,但问题已在评论中解决


NoSuchFieldError 几乎总是由不兼容的版本引起的。

你有什么版本的 HttpClient?你在使用 Maven 吗?您是否可能有多个版本的 HttpClient?
检查这些事情,你应该找到你的答案。

于 2016-04-04T20:45:57.290 回答