Я только начал работать с SOLR. Я хочу индексировать некоторые html-страницы и получить это из документации:
curl "http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true" -F "myfile=@/home/binaryplease/workspace/SOLRTest/HTMLPages/hello2.html"
Это работает так, как ожидается, когда запрос возвращает ожидаемые результаты.
Как мне сделать этот точный POST внутри приложения Java?
Я пробовал это, поскольку я не знаю, как это сделать с 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();
}
Каким будет правильный способ индексирования html файла в SOLR и выполнить запрос с помощью java? Я был бы признателен за пример.
EDIT: Я получил это сейчас, которое все еще не работает:
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();
}
}
}
Что я делаю не так?
Вы должны использовать клиент SolJ для доступа к Solr с Java, что, вероятно, будет намного проще для вас, чем переход на интерфейс 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();
document.addField("id", "552199");
с html-файлом с диска, чтобы я мог искать любые строки, которые встречаются на нем?