public SearchResult(SearchResponse resp) { SearchHits hits = resp.getHits(); this.total = hits.getTotalHits(); results = new ArrayList<>(hits.getHits().length); for (SearchHit searchHit : hits.getHits()) { if (searchHit.getSourceAsMap() != null) { results.add(searchHit.getSourceAsMap()); } else if (searchHit.getFields() != null) { Map<String, DocumentField> fields = searchHit.getFields(); results.add(toFieldsMap(fields)); } } }
private <T> void populateScriptFields(T result, SearchHit hit) { if (hit.getFields() != null && !hit.getFields().isEmpty() && result != null) { for (java.lang.reflect.Field field : result.getClass().getDeclaredFields()) { ScriptedField scriptedField = field.getAnnotation(ScriptedField.class); if (scriptedField != null) { String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name(); DocumentField searchHitField = hit.getFields().get(name); if (searchHitField != null) { field.setAccessible(true); try { field.set(result, searchHitField.getValue()); } catch (IllegalArgumentException e) { throw new ElasticsearchException( "failed to set scripted field: " + name + " with value: " + searchHitField.getValue(), e); } catch (IllegalAccessException e) { throw new ElasticsearchException("failed to access scripted field: " + name, e); } } } } } }
for(SearchHit hit : hits){ Map<String, Object> doc = hit.getSourceAsMap(); Map<String, DocumentField> fields = hit.getFields(); for(DocumentField searchHitField : fields.values()){ doc.put(searchHitField.getName(),searchHitField.getValue());
private List<String> createHeadersAndFillDocsMap(boolean flat, SearchHit[] hits, List<Map<String, Object>> docsAsMap) { Set<String> headers = new LinkedHashSet<>(); if (this.queryAction instanceof DefaultQueryAction) { headers.addAll(((DefaultQueryAction) this.queryAction).getFieldNames()); } for (SearchHit hit : hits) { Map<String, Object> doc = hit.getSourceAsMap(); Map<String, DocumentField> fields = hit.getFields(); for (DocumentField searchHitField : fields.values()) { doc.put(searchHitField.getName(), searchHitField.getValue()); } if (this.includeScore) { doc.put("_score", hit.getScore()); } if (this.includeType) { doc.put("_type", hit.getType()); } if (this.includeId) { doc.put("_id", hit.getId()); } mergeHeaders(headers, doc, flat); docsAsMap.add(doc); } return new ArrayList<>(headers); }
private void fillMinusHitsFromResults(Set<ComperableHitResult> comperableHitResults) { int currentId = 1; List<SearchHit> minusHitsList = new ArrayList<>(); for(ComperableHitResult result : comperableHitResults){ ArrayList<Object> values = new ArrayList<Object>(); values.add(result); SearchHit originalHit = result.getOriginalHit(); SearchHit searchHit = new SearchHit(currentId,originalHit.getId(), new Text(originalHit.getType()), originalHit.getFields()); searchHit.sourceRef(originalHit.getSourceRef()); searchHit.getSourceAsMap().clear(); Map<String, Object> sourceAsMap = result.getFlattenMap(); for(Map.Entry<String,String> entry : this.builder.getFirstTableFieldToAlias().entrySet()){ if(sourceAsMap.containsKey(entry.getKey())){ Object value = sourceAsMap.get(entry.getKey()); sourceAsMap.remove(entry.getKey()); sourceAsMap.put(entry.getValue(),value); } } searchHit.getSourceAsMap().putAll(sourceAsMap); currentId++; minusHitsList.add(searchHit); } int totalSize = currentId - 1; SearchHit[] unionHitsArr = minusHitsList.toArray(new SearchHit[totalSize]); this.minusHits = new SearchHits(unionHitsArr, totalSize,1.0f); }
private void fillInternalSearchHits(List<SearchHit> unionHits, SearchHit[] hits, Map<String, String> fieldNameToAlias) { for(SearchHit hit : hits){ SearchHit searchHit = new SearchHit(currentId, hit.getId(), new Text(hit.getType()), hit.getFields()); searchHit.sourceRef(hit.getSourceRef()); searchHit.getSourceAsMap().clear(); Map<String, Object> sourceAsMap = hit.getSourceAsMap(); if(!fieldNameToAlias.isEmpty()){ updateFieldNamesToAlias(sourceAsMap, fieldNameToAlias); } searchHit.getSourceAsMap().putAll(sourceAsMap); currentId++; unionHits.add(searchHit); } }
protected SearchHit createUnmachedResult( List<Field> secondTableReturnedFields, int docId, String t1Alias, String t2Alias, SearchHit hit) { String unmatchedId = hit.getId() + "|0"; Text unamatchedType = new Text(hit.getType() + "|null"); SearchHit searchHit = new SearchHit(docId, unmatchedId, unamatchedType, hit.getFields()); searchHit.sourceRef(hit.getSourceRef()); searchHit.getSourceAsMap().clear(); searchHit.getSourceAsMap().putAll(hit.getSourceAsMap()); Map<String,Object> emptySecondTableHitSource = createNullsSource(secondTableReturnedFields); mergeSourceAndAddAliases(emptySecondTableHitSource, searchHit,t1Alias,t2Alias); return searchHit; }
@Override public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) { long totalHits = response.getHits().getTotalHits(); float maxScore = response.getHits().getMaxScore(); List<T> results = new ArrayList<>(); for (SearchHit hit : response.getHits()) { if (hit != null) { T result = null; if (!StringUtils.isEmpty(hit.getSourceAsString())) { result = mapEntity(hit.getSourceAsString(), clazz); } else { result = mapEntity(hit.getFields().values(), clazz); } setPersistentEntityId(result, hit.getId(), clazz); setPersistentEntityVersion(result, hit.getVersion(), clazz); setPersistentEntityScore(result, hit.getScore(), clazz); populateScriptFields(result, hit); results.add(result); } } return new AggregatedPageImpl<T>(results, pageable, totalHits, response.getAggregations(), response.getScrollId(), maxScore); }
private void createKeyToResultsAndFillOptimizationStructure(Map<String,Map<String, List<Object>>> optimizationTermsFilterStructure, TableInJoinRequestBuilder firstTableRequest) { List<SearchHit> firstTableHits = fetchAllHits(firstTableRequest); int resultIds = 1; for (SearchHit hit : firstTableHits) { HashMap<String, List<Map.Entry<Field, Field>>> comparisons = this.hashJoinComparisonStructure.getComparisons(); for (Map.Entry<String, List<Map.Entry<Field, Field>>> comparison : comparisons.entrySet()) { String comparisonID = comparison.getKey(); List<Map.Entry<Field, Field>> t1ToT2FieldsComparison = comparison.getValue(); String key = getComparisonKey(t1ToT2FieldsComparison, hit, true, optimizationTermsFilterStructure.get(comparisonID)); //int docid , id SearchHit searchHit = new SearchHit(resultIds, hit.getId(), new Text(hit.getType()), hit.getFields()); searchHit.sourceRef(hit.getSourceRef()); onlyReturnedFields(searchHit.getSourceAsMap(), firstTableRequest.getReturnedFields(),firstTableRequest.getOriginalSelect().isSelectAll()); resultIds++; this.hashJoinComparisonStructure.insertIntoComparisonHash(comparisonID, key, searchHit); } } }
private SearchHit getMergedHit(int currentCombinedResults, String t1Alias, String t2Alias, SearchHit hitFromFirstTable, SearchHit matchedHit) { onlyReturnedFields(matchedHit.getSourceAsMap(), nestedLoopsRequest.getSecondTable().getReturnedFields(),nestedLoopsRequest.getSecondTable().getOriginalSelect().isSelectAll()); SearchHit searchHit = new SearchHit(currentCombinedResults, hitFromFirstTable.getId() + "|" + matchedHit.getId(), new Text(hitFromFirstTable.getType() + "|" + matchedHit.getType()), hitFromFirstTable.getFields()); searchHit.sourceRef(hitFromFirstTable.getSourceRef()); searchHit.getSourceAsMap().clear(); searchHit.getSourceAsMap().putAll(hitFromFirstTable.getSourceAsMap()); mergeSourceAndAddAliases(matchedHit.getSourceAsMap(), searchHit, t1Alias, t2Alias); return searchHit; }
SearchHit searchHit = new SearchHit(matchingHit.docId(), combinedId, new Text(matchingHit.getType() + "|" + secondTableHit.getType()), matchingHit.getFields()); searchHit.sourceRef(matchingHit.getSourceRef()); searchHit.getSourceAsMap().clear();
/** * The hit field matching the given field name. */ public DocumentField field(String fieldName) { return getFields().get(fieldName); }
@Override public <E> List<E> getColumnsById(String schemaName, String tableName, String pKeyColumnName, String columnName, Object pKeyColumnValue, Class columnJavaType) { // fetch list ADDRESS_ID for given PERSON_ID QueryBuilder filterBuilder = new TermQueryBuilder(pKeyColumnName, pKeyColumnValue); SearchResponse response = txClient.prepareSearch(schemaName.toLowerCase()).setTypes(tableName) .setPostFilter(filterBuilder).addField(columnName).execute().actionGet(); SearchHits hits = response.getHits(); List columns = new ArrayList(); for (SearchHit hit : hits.getHits()) { Map<String, SearchHitField> fields = hit.getFields(); columns.add(fields.get(columnName).getValue()); } return columns; }
@Override public Object[] findIdsByColumn(String schemaName, String tableName, String pKeyName, String columnName, Object columnValue, Class entityClazz) { TermQueryBuilder filter = QueryBuilders.termQuery(columnName, columnValue); SearchResponse response = txClient.prepareSearch(schemaName.toLowerCase()).setTypes(tableName) .addField(pKeyName).setPostFilter(filter).execute().actionGet(); SearchHits hits = response.getHits(); Long length = hits.getTotalHits(); int absoluteLength = length.intValue(); Object[] ids = new Object[absoluteLength]; int counter = 0; for (SearchHit hit : hits.getHits()) { Map<String, SearchHitField> fields = hit.getFields(); ids[counter++] = fields.get(pKeyName).getValue(); } return ids; }
.getAt(0).getFields().get(jpaField).getValue();
} else { out.writeVInt(fields.size()); for (DocumentField hitField : getFields().values()) { hitField.writeTo(out);
for (SearchHit hit : response.getHits()) { ESSearchHit esSearchHit = new ESSearchHit(); if (!hit.getFields().isEmpty()) { Map<String, ESDocumentField> esFields = new HashMap<>(); for (Map.Entry<String, DocumentField> entry : hit.getFields().entrySet()) { esFields.put(entry.getKey(), new ESDocumentField(entry.getKey(), entry.getValue().getValues()));
for (SearchHit hit : response.getHits()) { ESSearchHit esSearchHit = new ESSearchHit(); if (!hit.getFields().isEmpty()) { Map<String, ESDocumentField> esFields = new HashMap<>(); for (Map.Entry<String, SearchHitField> entry : hit.getFields().entrySet()) { esFields.put(entry.getKey(), new ESDocumentField(entry.getKey(), entry.getValue().getValues()));