2015-12-14 5 views
0

У меня возникают серьезные проблемы, пытаясь найти правильный синтаксис, чтобы подталкивать документ в индекс elasticsearch по типу.Elasticsearch индексирует документ

Мой код им с помощью, чтобы сделать это:

String url = "https://my_url/my_index_name"; 

StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
    new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      try { 
       JSONObject jsonResponse = new JSONObject(response).getJSONObject("form"); 
       String site = jsonResponse.getString("site"), 
         network = jsonResponse.getString("network"); 
       Log.d("Site: ", site + "\nNetwork: "+network); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       Log.e("JSON EXCEPTION", e.toString()); 
      } 
     } 
    }, 
    new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
     } 
    } 

)

{ 
@Override 
protected Map<String, String> getParams() 
{ 
    Map<String, String> params = new HashMap<>(); 
    // the POST parameters: 
    params.put("type", "type_name");; 
    params.put("field1", field1_value); 
    params.put("field2", field2_value); 
    params.put("field3", field3_value); 
    params.put("field4", field4_value); 
    params.put("field5", field5_value); 
    return params; 
} 
}; 

Volley.newRequestQueue(this).add(postRequest); 

Это ударяя сервера, так как я получаю 400 запросов, но я просто не могу получить его, чтобы идти в используя это.

12-14 16:19:04.533 12642-13089/? E/Volley﹕ [41831] 
BasicNetwork.performRequest: Unexpected response code 400 for URL 

Может кто-нибудь просветить меня относительно того, что правильный синтаксис, используя Java-код, или сказать мне, что я делаю неправильно?

Я предположил, правильный синтаксис был:

HTTP: // URL | index_name | тип | тело?

EDIT: Я искал SO, эластичные java api, группы google и по всему Интернету в течение 3 дней, без везения! Все, что угодно, очень ценится!

new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        error.printStackTrace(); 
        Log.e("VOLLEY ERROR", "" + error.toString()); 
       } 
      } 

Результаты в: Залп ОШИБКА: com.android.volley.ServerError

Любые идеи?

+0

400 - это код ответа «плохой запрос», вам нужно найти точное сообщение об ошибке в ответе, который возвращается с помощью этого кода. Это сообщение об ошибке (это где-то, проверьте журналы) скажет вам, какая часть ваших запросов elasticsearch не поняла –

+0

Любая идея, как я могу это сделать? Я успешно запросил индекс и получил сопоставления в logcat. – mangledBadger

+0

Возможно, в обработчике исключения error.getMessage()? VolleyError должен предоставить доступ к полному сообщению об ошибке. –

ответ

0

Хорошо, поэтому мне удалось это исправить.

Там было два вопроса:

Первый номер был с URL, который был:

String url = "https://my_url/my_index_name"; 

Это должно было быть:

String url = "https://my_url/my_index_name/type%20-d"; 

Второй вопрос с фактическими аргументами :

params.put("type", "type_name");; 
params.put("field1", field1_value); 
params.put("field2", field2_value); 
params.put("field3", field3_value); 
params.put("field4", field4_value); 
params.put("field5", field5_value); 
return params; 

я сменил это для:

String urlParameters = 
       "{" + 
       "  \"field\": \" + field_value \"," + 
       "  \"field\": \" + field_value \"," + 
       "  \"field\": \" + field_value \"," + 
       "  \"field\": \" + field_value \"," + 
       "  \"field\": \" + field_value \"" + 
       "}"; 

и Поста:

DataOutputStream wr = new DataOutputStream(httpConn.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

Все работает, как я хочу сейчас, спасибо за помощь.

Смежные вопросы