Я использую различные Elasti c Поисковые запросы из моего Java кода. Чтобы консолидировать мой код, я хотел бы инициализировать объект SearchResponse перед тем, как мои условные циклы запускают запрос ElasticSearch с разными настройками. Таким образом, я могу выполнить одну строку кода один раз, чтобы получить общее количество совпадений из запроса. Вы поймете, что я имею в виду из кода
@GET
@Path("/search")
public SearchResultsAndFacets search() {
SearchResultsAndFacets srf = new SearchResultsAndFacets();
RestHighLevelClient client = createHighLevelRestClient();
// Build the base query that applies to all searches
SearchSourceBuilder querySourceBuilder = buildQueryWrapper(colNames, sro.q, sro.f,
facetsToUpdate, sro.u, sro.lc);
SearchResponse searchresponse; // This line does not work. How can I initialize this object here (outside of the following conditional loops)?
// Searches executed from the table view to populate a table of documents
if (searchType.equals("table")) {
List<SortParameters> sortParametersList = sortAdapter(sro.s);
searchResponse = runTableQuery(client, querySourceBuilder, sortParameters, offset, limit);
}
// Searches involving geo_point data to populate a leaflet map
if (searchType.equals("contacts")) {
RestHighLevelClient client = createHighLevelRestClient();
ElasticSearchMapService esms = new ElasticSearchMapService();
searchResponse = esms.runContactsMapQuery(querySourceBuilder, client, <some geographic coordinate parameters necessary for this search>);
MapSearchResponse mapSearchResponse = esms.getLocationsFromSearchResponse(searchResponse);
srf.mapSearchResponse = mapSearchResponse;
}
// I would like to include these next few lines here at the end of the conditional loops.
// Currently they must be inside each if clause.
srf.totalHits = searchResponse.getHits().getTotalHits().value;
srf.elapsed = searchResponse.getTook().getMillis();
srf.facetsData = getUpdatedFacetData(facetsToUpdate,
searchResponse, sro.f);
return srf;
}
REST-клиент высокого уровня Elasti c для JAVA не позволяет инициализировать объект SearchResponse, подобный этому. Это также невозможно сделать с помощью
SearchResponse searchResponse = new SearchResponse ();
И если мы сделаем ... * 1010, будет ошибка нулевого указателя *
SearchResponse searchResponse = new SearchResponse (null);
Как я могу переписать этот код, чтобы я мог извлекать totalHits, elapsed и facetsData вне условных циклов?