doc.put("_score", hit.getScore());
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); }
public static String hitsAsStringResult(SearchHits results, MetaSearchResult metaResults) throws IOException { if(results == null) return null; Object[] searchHits; searchHits = new Object[(int) results.getTotalHits()]; int i = 0; for(SearchHit hit : results) { HashMap<String,Object> value = new HashMap<>(); value.put("_id",hit.getId()); value.put("_type", hit.getType()); value.put("_score", hit.getScore()); value.put("_source", hit.getSourceAsMap()); searchHits[i] = value; i++; } HashMap<String,Object> hits = new HashMap<>(); hits.put("total",results.getTotalHits()); hits.put("max_score",results.getMaxScore()); hits.put("hits",searchHits); XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON).prettyPrint(); builder.startObject(); builder.field("took", metaResults.getTookImMilli()); builder.field("timed_out",metaResults.isTimedOut()); builder.field("_shards", ImmutableMap.of("total", metaResults.getTotalNumOfShards(), "successful", metaResults.getSuccessfulShards() , "failed", metaResults.getFailedShards())); builder.field("hits",hits) ; builder.endObject(); return BytesReference.bytes(builder).utf8ToString(); } }
@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); }
@Override public Iterable<RawQuery.Result<String>> query(RawQuery query, KeyInformation.IndexRetriever informations, BaseTransaction tx) throws BackendException { SearchRequestBuilder srb = client.prepareSearch(indexName); srb.setTypes(query.getStore()); srb.setQuery(QueryBuilders.queryStringQuery(query.getQuery())); srb.setFrom(query.getOffset()); if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields(); //srb.setExplain(true); SearchResponse response = srb.execute().actionGet(); log.debug("Executed query [{}] in {} ms", query.getQuery(), response.getTookInMillis()); SearchHits hits = response.getHits(); if (!query.hasLimit() && hits.totalHits() >= maxResultsSize) log.warn("Query result set truncated to first [{}] elements for query: {}", maxResultsSize, query); List<RawQuery.Result<String>> result = new ArrayList<RawQuery.Result<String>>(hits.hits().length); for (SearchHit hit : hits) { result.add(new RawQuery.Result<String>(hit.id(),hit.getScore())); } return result; }
/** * Transforms a list of Elasticsearch SearchHits to a list of SearchResults * @param searchResponse An Elasticsearch SearchHit to be converted. * @return The list of SearchResults for the SearchHit */ protected static List<SearchResult> getSearchResults( org.elasticsearch.action.search.SearchResponse searchResponse) { return Arrays.stream(searchResponse.getHits().getHits()).map(searchHit -> { SearchResult searchResult = new SearchResult(); searchResult.setId(searchHit.getId()); searchResult.setSource(searchHit.getSource()); searchResult.setScore(searchHit.getScore()); searchResult.setIndex(searchHit.getIndex()); return searchResult; } ).collect(Collectors.toList()); } }
public static Option fromXContent(XContentParser parser) { Map<String, Object> values = PARSER.apply(parser, null); Text text = new Text((String) values.get(Suggestion.Entry.Option.TEXT.getPreferredName())); Float score = (Float) values.get(Suggestion.Entry.Option.SCORE.getPreferredName()); @SuppressWarnings("unchecked") Map<String, Set<String>> contexts = (Map<String, Set<String>>) values .get(CompletionSuggestion.Entry.Option.CONTEXTS.getPreferredName()); if (contexts == null) { contexts = Collections.emptyMap(); } SearchHit hit = null; // the option either prints SCORE or inlines the search hit if (score == null) { hit = SearchHit.createFromMap(values); score = hit.getScore(); } CompletionSuggestion.Entry.Option option = new CompletionSuggestion.Entry.Option(-1, text, score, contexts); option.setHit(hit); return option; }
private SearchResult getSearchResult(SearchHit searchHit, List<String> fields) { SearchResult searchResult = new SearchResult(); searchResult.setId(searchHit.getId()); Map<String, Object> source; if (fields != null) { Map<String, Object> resultSourceAsMap = searchHit.getSourceAsMap(); source = new HashMap<>(); fields.forEach(field -> { source.put(field, resultSourceAsMap.get(field)); }); } else { source = searchHit.getSource(); } searchResult.setSource(source); searchResult.setScore(searchHit.getScore()); searchResult.setIndex(searchHit.getIndex()); return searchResult; }
@Override protected boolean matchesSafely(SearchHit searchHit) { return searchHit.getScore() == score; }
@Override public float getScore() { return hit.getScore(); }
@Override public void describeMismatchSafely(final SearchHit searchHit, final Description mismatchDescription) { mismatchDescription.appendText(" was ").appendValue(searchHit.getScore()); }
public ElasticSearchGraphQueryIterable(SearchResponse searchResponse, QueryBase.Parameters parameters, Iterable<T> iterable, boolean evaluateQueryString, boolean evaluateHasContainers, long totalHits, long searchTimeInNanoSeconds, SearchHits hits) { super(parameters, iterable, evaluateQueryString, evaluateHasContainers); this.searchResponse = searchResponse; this.totalHits = totalHits; this.searchTimeInNanoSeconds = searchTimeInNanoSeconds; for (SearchHit hit : hits.getHits()) { scores.put(hit.getId(), (double) hit.getScore()); } }
public ElasticSearchGraphQueryIterable(SearchResponse searchResponse, QueryParameters parameters, Iterable<T> iterable, boolean evaluateQueryString, boolean evaluateHasContainers, long totalHits, long searchTimeInNanoSeconds, SearchHits hits) { super(parameters, iterable, evaluateQueryString, evaluateHasContainers); this.searchResponse = searchResponse; this.totalHits = totalHits; this.searchTimeInNanoSeconds = searchTimeInNanoSeconds; for (SearchHit hit : hits.getHits()) { scores.put(hit.getId(), (double) hit.getScore()); } }
public ElasticSearchGraphQueryIterable(SearchResponse searchResponse, QueryBase.Parameters parameters, Iterable<T> iterable, boolean evaluateQueryString, boolean evaluateHasContainers, long totalHits, long searchTimeInNanoSeconds, SearchHits hits) { super(parameters, iterable, evaluateQueryString, evaluateHasContainers); this.searchResponse = searchResponse; this.totalHits = totalHits; this.searchTimeInNanoSeconds = searchTimeInNanoSeconds; for (SearchHit hit : hits.getHits()) { scores.put(hit.getId(), (double) hit.getScore()); } }
public ElasticsearchSample(ElasticsearchIndex elasticsearchIndex, SearchHit hit) { this.elasticsearchIndex = elasticsearchIndex; setId(hit.getId()); System.out.println(getId()); if (hit.getSource() != null) { this.map = hit.getSource(); } else { this.map = new TreeMap<String, Object>(); } setScore(hit.getScore()); }
private static void loadNgramFeatureFrequency(ESIndex index, DataSet dataSet, Ngram feature, IdTranslator idTranslator, String docFilter){ int featureIndex = feature.getIndex(); SearchResponse response = index.spanNearFrequency(feature, docFilter, idTranslator.numData()); SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit: hits){ String indexId = hit.getId(); float score = hit.getScore(); int algorithmId = idTranslator.toIntId(indexId); dataSet.setFeatureValue(algorithmId,featureIndex,score); } }
private static void loadNgramFeatureTFIFL(ESIndex index, DataSet dataSet, Ngram feature, IdTranslator idTranslator, String docFilter, Map<String, float[]> fieldLength){ int featureIndex = feature.getIndex(); SearchResponse response = index.spanNearFrequency(feature, docFilter, idTranslator.numData()); SearchHit[] hits = response.getHits().getHits(); String field = feature.getField(); for (SearchHit hit: hits){ String indexId = hit.getId(); float score = hit.getScore(); int algorithmId = idTranslator.toIntId(indexId); float docLength = fieldLength.get(field)[algorithmId]; double s = score/docLength; dataSet.setFeatureValue(algorithmId,featureIndex,s); } }
private static void loadNgramFeatureOriginal(ESIndex index, DataSet dataSet, Ngram feature, IdTranslator idTranslator, String docFilter){ int featureIndex = feature.getIndex(); SearchResponse response = index.spanNear(feature, docFilter, idTranslator.numData()); SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit: hits){ String indexId = hit.getId(); float score = hit.getScore(); int algorithmId = idTranslator.toIntId(indexId); dataSet.setFeatureValue(algorithmId,featureIndex,score); } }
private static void loadCodeDesFeature(ESIndex index, DataSet dataSet, Feature feature, IdTranslator idTranslator, String docFilter){ int featureIndex = feature.getIndex(); CodeDescription codeDescription = (CodeDescription)(feature); SearchResponse response = index.minimumShouldMatch(codeDescription.getDescription(), codeDescription.getField(), codeDescription.getPercentage(), idTranslator.numData(), docFilter); SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit: hits){ String indexId = hit.getId(); float score = hit.getScore(); int algorithmId = idTranslator.toIntId(indexId); dataSet.setFeatureValue(algorithmId,featureIndex,score); } }