Завитый эквивалент POST в Java для SOLR

1

Я только начал работать с 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();
        }
    }
}

Что я делаю не так?

  • 0
    Вы гуглили фразу "отправка http сообщения в Java"? Это может привести вас к этому вопросу StackOverflow
  • 0
    @RayToal посмотреть мое редактирование.
Показать ещё 2 комментария
Теги:
curl
post
http
solr

1 ответ

3
Лучший ответ

Вы должны использовать клиент 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();
  • 0
    Я попробовал это, и он отлично работает, но как бы я подставил document.addField("id", "552199"); с html-файлом с диска, чтобы я мог искать любые строки, которые встречаются на нем?
  • 0
    Используйте ContentStreamUpdateRequest в SolrJ. См. Пример wiki.apache.org/solr/ContentStreamUpdateRequestExample .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню