1

我想solr 4.0使用 java 添加数据。我有以下数组List<Map<String, Object>> docs = new ArrayList<>();。我正在使用GSON方法将数组转换为 json 对象。我想将这些数据提交给 solr。我怎么做?我读过solrj但不知道如何让它工作。

4

2 回答 2

5

使用 solrj 客户端,您可以创建 SolrInputDocument 对象并将它们发布到 SolrServer 实例,无论是 HttpSolrServer 还是 EmbeddedSolrServer。SolrInputDocument 是一个名称值对集合,相当于您尝试发布的 json。如https://wiki.apache.org/solr/Solrj#Adding_Data_to_Solr所述

如果您真的想将 JSON 发送到 Solr 服务器,您可以使用 HTTPClient 之类的东西将 JSON 发布到http://solrHost.com:8983/solr/update/json

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://solrHost.com:8983/solr/update/json");
StringEntity input = new StringEntity("{\"firstName\":\"Bob\",\"lastName\":\"Williams\"}");
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
于 2013-02-18T06:57:05.633 回答
2

要通过 Java 对 solr 进行索引/添加,请尝试此操作。Solr 使用类似 REST 的 API 来操作索引数据。

public void postSolr() {
try{
   DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://localhost:8983/solr/update/json?wt=json&commit=true");
    StringEntity entity  = new StringEntity("{\"add\": { \"doc\": {\"id\": \"26\",\"keys\": \"java,php\"}}}", "UTF-8");
    entity.setContentType("application/json");
    post.setEntity(entity);                
    HttpResponse response = httpClient.execute(post);
    HttpEntity httpEntity = response.getEntity();
    InputStream in = httpEntity.getContent();

    String encoding = httpEntity.getContentEncoding() == null ? "UTF-8" : httpEntity.getContentEncoding().getName();
    encoding = encoding == null ? "UTF-8" : encoding;
    String responseText = IOUtils.toString(in, encoding);
    System.out.println("response Text is " + responseText);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}
}

成功发布时的响应:

响应文本为 {"responseHeader":{"status":0,"QTime":1352}}

于 2015-04-29T10:45:57.313 回答