leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.

Какую библиотеку для Java-кода пользуют под Elasticsearch?

Решил попробовать на яве покидать запросы в эластик, и никак не могу понять, какой клиент взять и как с этим добром дальше жить..
Из официальных клиентов есть три.
Есть транспортный клиент на яве (который на порту 9300) - он вроде бы как депрекайтед, да и под каждую версию свой...
Есть низкоуровневый REST-клиент.
Есть высокоуровневый REST-клиент, который работает через низкоуровневый...

Может быть кто подскажет что-то наподобие питоновского elasticsearch-dsl?
И хотелось бы знать, кто чем пользуется.
  • Вопрос задан
  • 1196 просмотров
Решения вопроса 1
leahch
@leahch Автор вопроса
3D специалист. Dолго, Dорого, Dерьмово.
Сам себе отвечу.

Дополню, есть еще jest client - https://www.elastic.co/blog/found-java-clients-for...
Но к нему нужно тащить официального тtransport клиента, в основном из-за QueryBuilders, что в общем неплохо (я было начал сам писать классы для query-маппинга)
----
В общем, выдираем все из jackson приблизительно так
String query = "{\n" + 
	    			"  \"query\": { \"match_all\": {}\n" + 
	    			"  }" + 
	    			"}\n" + 
	    			"\n" + 
	    			"";
		Response response = client.performRequest("GET","/offers_v1/offer/_search", new Hashtable<>(),
	    	        new StringEntity(query));
	    	
		HttpEntity entity = response.getEntity();
		 
		ObjectMapper ob = new ObjectMapper()
				.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		ResponseHits responseHits = ob.readValue(entity.getContent(), ResponseHits.class);
		List<Hit> hits = responseHits.getHits().getHits();
		
		return Results.html("index").put("hits", hits);

Для этого создаем следующие классы ResponseHits. Hits, Hit
public class ResponseHits {
	private Hits hits;
}
public class Hits {
	private List<Hit> hits;
}
public class Hit {
	@JsonProperty(value = "_index")
    private String index;
	@JsonProperty(value = "_type")
    private String type;
	@JsonProperty(value = "_id")
    private String id;
	@JsonProperty(value = "_score")
    private Double score;
	@JsonProperty(value = "_source")
    private Hashtable<String, Object> source;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы