我刚刚开始使用SOLR。我想索引一些html页面并从文档中得到这个:
curl "http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true" -F "myfile=@/home/binaryplease/workspace/SOLRTest/HTMLPages/hello2.html"
当查询返回预期结果时,其工作正常。
我如何在java应用程序中执行此确切的POST?
我尝试了这个,因为我不知道如何使用HttpClient进行操作,但它无法正常工作:
String command = "curl \"http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true\" -F \"myfile=@\"" +f.getAbsoluteFile() + "\"";
try {
proc = Runtime.getRuntime().exec(command );
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
System.out.println("Inputstream " + getStringFromInputStream(in));
System.out.println("Errorstream " + getStringFromInputStream(err));
} catch (IOException e) {
e.printStackTrace();
}
在SOLR中索引html文件并使用java进行查询的正确方法是什么? 我很感激一个例子。
编辑:我现在得到了这个仍然没有工作: HttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true");
// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("myfile", "@/home/binaryplease/workspace/SOLRTest/HTMLPages/hello3.html"));
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
try {
System.out.println("Content " + getStringFromInputStream(instream));
} finally {
instream.close();
}
}
}
我做错了什么?
答案 0 :(得分:3)
您应该使用SolJ客户端从Java访问Solr,这可能比使用HTTP接口更容易:
SolrJ是一个API,可以让Java应用程序轻松与之交谈 Solr的。 SolrJ隐藏了许多连接到Solr和。的细节 允许您的应用程序通过简单的高级别与Solr交互 方法
SolrJ的中心是org.apache.solr.client.solrj包 只包含五个主要类。首先创建一个SolrServer,它 表示要使用的Solr实例。然后发送SolrRequests 或SolrQuerys并取回SolrResponses。
SolrServer是抽象的,所以要连接到远程Solr实例, 你实际上会创建一个HttpSolrServer实例,它知道如何实现 使用HTTP与Solr交谈。
https://cwiki.apache.org/confluence/display/solr/Using+SolrJ
设置非常简单:
String urlString = "http://localhost:8983/solr";
SolrServer solr = new HttpSolrServer(urlString);
查询也是如此:
SolrQuery parameters = new SolrQuery();
parameters.set("q", mQueryString);
QueryResponse response = solr.query(parameters);
SolrDocumentList list = response.getResults();
索引相同:
String urlString = "http://localhost:8983/solr";
SolrServer solr = new HttpSolrServer(urlString);
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "552199");
document.addField("name", "Gouda cheese wheel");
document.addField("price", "49.99");
UpdateResponse response = solr.add(document);
// Remember to commit your changes!
solr.commit();