solr已经搭建好,并且使用查询是正常的,方法如下:
public static void queryQuestionByContentFromSolr() {
try {
String sqStr = "我们的爱";
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(HttpClientUtil.PROP_BASIC_AUTH_USER, "mxjy");
params.set(HttpClientUtil.PROP_BASIC_AUTH_PASS, "123456");
CloseableHttpClient closeableHttpClient = HttpClientUtil.createClient(params);
HttpSolrClient.Builder builer = new HttpSolrClient.Builder("http://192.168.0.71:8983/solr/test/").withHttpClient(closeableHttpClient);
SolrClient client = builer.build();
SolrQuery sq = new SolrQuery();
sq.set("q", "QUESTION_STEM:"+sqStr);
//sq.addFilterQuery("GRADE:"+null);
//sq.addFilterQuery("COURSE:0005");
//sq.setRows(5);
QueryResponse response = client.query(sq);
SolrDocumentList list = response.getResults();
for (SolrDocument solrDocument : list) {
String QUESTION_ID = (String) solrDocument.getFirstValue("QUESTION_ID");
String QUESTION_STEM = (String) solrDocument.getFirstValue("QUESTION_STEM");
//String GRADE = (String) solrDocument.getFirstValue("GRADE");
//String COURSE = (String) solrDocument.getFirstValue("COURSE");
//System.out.println("GRADE:"+GRADE+"-COURSE:"+COURSE+"-QUESTION:"+QUESTION_ID + "-" + QUESTION_STEM);
System.out.println("QUESTION:"+QUESTION_ID + "-" + QUESTION_STEM);
}
client.close();
System.out.println("结束!");
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
但是使用类似的代码去添加数据时总是报错,代码如下:
public static void addQuestionToSolr(){
try {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(HttpClientUtil.PROP_BASIC_AUTH_USER, "mxjy");
params.set(HttpClientUtil.PROP_BASIC_AUTH_PASS, "123456");
CloseableHttpClient closeableHttpClient = HttpClientUtil.createClient(params);
HttpSolrClient.Builder builer = new HttpSolrClient
.Builder("http://192.168.0.71:8983/solr/test")
.withHttpClient(closeableHttpClient)
.withConnectionTimeout(10000)
.withSocketTimeout(60000);
SolrClient client = builer.build();
SolrInputDocument inputDocument = new SolrInputDocument();
inputDocument.addField("id", "123");
inputDocument.addField("roleName", "角色名称");
// 执行添加 ps:如果id相同,则执行更新操作
// 要指定操作的collection 就是solr-home下定义的core
client.add(inputDocument);
// 提交添加/更新
client.commit();
System.out.println("结束!");
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
并且每次都是client.add(inputDocument)这段代码报错,错误日志如下:
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
org.apache.solr.client.solrj.SolrServerException: IOException occurred when talking to server at: http://192.168.0.71:8983/solr/test
at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:670)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:262)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:245)
at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:211)
at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:177)
at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:138)
at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:156)
_at com.minxue.util.common.SolrUtil.addQuestionToSolr(SolrUtil.java:77)_
at com.minxue.util.common.SolrUtil.main(SolrUtil.java:54)
Caused by: org.apache.http.client.ClientProtocolException
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:187)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:555)
... 8 more
Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity.
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:226)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
... 11 more