2015-07-11 4 views
3

У меня есть следующие требования в моем весеннем веб-приложение:
Elasticsearch вернуться сырец JSON с Java API

  • найти объекты Elasticsearch и отображения их на карте Google (формат JSON предпочтительнее)
  • найти объекты (то же запрос, как указано выше) от Elasticsearch и отображать их в списке (Java объектов в формате предпочтительным, чтобы отобразить его на странице JSP)

Я написал поиск с использованием Java API SearchRequestBuilder и она отлично работает:

SearchRequestBuilder request = client.prepareSearch("index").setTypes("type") 
     .setSearchType(SearchType.QUERY_THEN_FETCH).setFrom(0).setSize(10).addFields(RESPONSE_FIELDS); 
//request is much more complicated 
//... 
SearchResponse response = request.execute().actionGet(); 
SearchHits hits = response.getHits(); 

Но для отображения его на карте Google я предпочел бы просто получить объект JSON из elasticsearch вместо SearchResponse объекта, как это:

{ 
    "_index": "indexName", 
    "_type": "type", 
    "_id": "9094", 
    "_version": 31, 
    "found": true, 
    "_source": { 
     //list of properties 
    } 
} 

Можно ли получить ответ JSON с помощью Java API + SearchRequestBuilder или Я должен использовать REST API для этого?

ответ

4

Java api не будет отображаться для json (или любого другого объекта в этом отношении) для вас. Тем не менее, вы могли бы сделать что-то вроде:

  • использования spring-data-elasticsearch десериализовать непосредственно к объекту
  • принять ответ от API Java и разобрать на JSON, используя что-то вроде Jackson
  • рассмотреть вопрос об использовании jest Api который будет возвращать gson (Googles json).
+0

Вы можете использовать путь jayway для синтаксического анализа SearchHit.getSource (который также интегрируется с Mappers как Jackson & SmartJSON для отображения обратно к классу/объекту и наоборот). Я считаю важным сохранить типы агностик для баз данных NoSQL, таких как Elastic. Не пытайтесь слишком усердно сделать «много типов». – Dexter