public static <D extends BaseDoc> List<D> convertToDocs(SearchHits hits, Function<Map<String, Object>, D> converter) { List<D> docs = new ArrayList<>(); for (SearchHit hit : hits.getHits()) { docs.add(converter.apply(hit.getSource())); } return docs; }
Map<String, Object> source = new HashMap<String, Object>(); String riverName = hit.getType(); RiverSettings riverSettings = new RiverSettings(null, hit.getSource()); MongoDBRiverDefinition definition = MongoDBRiverDefinition.parseSettings(riverName, riverIndexName, riverSettings, null); source.put("settings", hit.getSource()); source.put("lastTimestamp", lastTimestamp); source.put("indexCount", MongoDBRiver.getIndexCount(esClient, definition));
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 public Status read( final String table, final String key, final Set<String> fields, final Map<String, ByteIterator> result) { try { final SearchResponse searchResponse = search(table, key); if (searchResponse.getHits().totalHits == 0) { return Status.NOT_FOUND; } final SearchHit hit = searchResponse.getHits().getAt(0); if (fields != null) { for (final String field : fields) { result.put(field, new StringByteIterator((String) hit.getSource().get(field))); } } else { for (final Map.Entry<String, Object> e : hit.getSource().entrySet()) { if (KEY.equals(e.getKey())) { continue; } result.put(e.getKey(), new StringByteIterator((String) e.getValue())); } } return Status.OK; } catch (final Exception e) { e.printStackTrace(); return Status.ERROR; } }
entry = new HashMap<>(fields.size()); for (final String field : fields) { entry.put(field, new StringByteIterator((String) hit.getSource().get(field))); entry = new HashMap<>(hit.getSource().size()); for (final Map.Entry<String, Object> field : hit.getSource().entrySet()) { if (KEY.equals(field.getKey())) { continue;
@Override public Status update(final String table, final String key, final Map<String, ByteIterator> values) { try { final SearchResponse response = search(table, key); if (response.getHits().totalHits == 0) { return Status.NOT_FOUND; } final SearchHit hit = response.getHits().getAt(0); for (final Entry<String, String> entry : StringByteIterator.getStringMap(values).entrySet()) { hit.getSource().put(entry.getKey(), entry.getValue()); } final IndexResponse indexResponse = client.prepareIndex(indexKey, table, hit.getId()).setSource(hit.getSource()).get(); if (indexResponse.getResult() != DocWriteResponse.Result.UPDATED) { return Status.ERROR; } if (!isRefreshNeeded) { synchronized (this) { isRefreshNeeded = true; } } return Status.OK; } catch (final Exception e) { e.printStackTrace(); return Status.ERROR; } }
/** * Get all the indexed documents (no paginated results). Results are converted to BaseDoc objects. * Results are not sorted. */ public <E extends BaseDoc> List<E> getDocuments(IndexType indexType, final Class<E> docClass) { List<SearchHit> hits = getDocuments(indexType); return new ArrayList<>(Collections2.transform(hits, input -> { try { return (E) ConstructorUtils.invokeConstructor(docClass, input.getSource()); } catch (Exception e) { throw Throwables.propagate(e); } })); }
entry = new HashMap<>(fields.size()); for (String field : fields) { entry.put(field, new StringByteIterator((String) hit.getSource().get(field)));
private Query(final String indexName, QueryBuilder queryBuilder, String order_field, int resultCount) { //TODO: sort data using order_field // prepare request SearchRequestBuilder request = elasticsearchClient.prepareSearch(indexName) .setSearchType(SearchType.QUERY_THEN_FETCH) .setQuery(queryBuilder) .setFrom(0) .setSize(resultCount); request.clearRescorers(); // get response SearchResponse response = request.execute().actionGet(); hitCount = (int) response.getHits().getTotalHits(); // evaluate search result SearchHit[] hits = response.getHits().getHits(); this.result = new ArrayList<Map<String, Object>>(hitCount); for (SearchHit hit: hits) { Map<String, Object> map = hit.getSource(); this.result.add(map); } }
public List<Map<String, Object>> queryWithConstraints(final String indexName, final String fieldName, final String fieldValue, final Map<String, String> constraints, boolean latest) throws IOException { SearchRequestBuilder request = this.elasticsearchClient.prepareSearch(indexName) .setSearchType(SearchType.QUERY_THEN_FETCH) .setFrom(0); BoolQueryBuilder bFilter = QueryBuilders.boolQuery(); bFilter.filter(QueryBuilders.constantScoreQuery(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery(fieldName, fieldValue)))); for (Object o : constraints.entrySet()) { @SuppressWarnings("rawtypes") Map.Entry entry = (Map.Entry) o; bFilter.filter(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery((String) entry.getKey(), ((String) entry.getValue()).toLowerCase()))); } request.setQuery(bFilter); // get response SearchResponse response = request.execute().actionGet(); // evaluate search result ArrayList<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit: hits) { Map<String, Object> map = hit.getSource(); result.add(map); } return result; }
public boolean hasAccessToProject(String projectUuid) { SearchHits hits = esClient.prepareSearch(FOO_INDEX) .setTypes(FOO_TYPE) .setQuery(QueryBuilders.boolQuery() .must(QueryBuilders.termQuery(FooIndexDefinition.FIELD_PROJECT_UUID, projectUuid)) .filter(authorizationTypeSupport.createQueryFilter())) .get() .getHits(); List<String> names = Arrays.stream(hits.hits()) .map(h -> h.getSource().get(FooIndexDefinition.FIELD_NAME).toString()) .collect(MoreCollectors.toList()); return names.size() == 2 && names.contains("bar") && names.contains("baz"); } }
this.result = new ArrayList<Map<String, Object>>(hitCount); for (SearchHit hit: hits) { Map<String, Object> map = hit.getSource(); this.result.add(map);
public Map<String, Object> query(final String indexName, final String fieldKey, final String fieldValue) { if (fieldKey == null || fieldValue.length() == 0) return null; // prepare request BoolQueryBuilder query = QueryBuilders.boolQuery(); query.filter(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery(fieldKey, fieldValue))); SearchRequestBuilder request = elasticsearchClient.prepareSearch(indexName) .setSearchType(SearchType.QUERY_THEN_FETCH) .setQuery(query) .setFrom(0) .setSize(1) .setTerminateAfter(1); // get response SearchResponse response = request.execute().actionGet(); // evaluate search result SearchHit[] hits = response.getHits().getHits(); if (hits.length == 0) return null; assert hits.length == 1; Map<String, Object> map = hits[0].getSource(); return map; }
@Test public void update_index_when_updating_user_login() { UserDto oldUser = db.users().insertUser(); createDefaultGroup(); userIndexer.indexOnStartup(null); underTest.updateAndCommit(session, oldUser, new UpdateUser() .setLogin("new_login"), u -> { }); List<SearchHit> indexUsers = es.getDocuments(UserIndexDefinition.INDEX_TYPE_USER); assertThat(indexUsers).hasSize(1); assertThat(indexUsers.get(0).getSource()) .contains(entry("login", "new_login")); }
@Test public void update_user() { UserDto user = db.users().insertUser(newLocalUser(DEFAULT_LOGIN, "Marius", "marius@email.com") .setScmAccounts(asList("ma", "marius33"))); createDefaultGroup(); userIndexer.indexOnStartup(null); underTest.updateAndCommit(session, user, new UpdateUser() .setName("Marius2") .setEmail("marius2@mail.com") .setScmAccounts(singletonList("ma2")), u -> { }); UserDto updatedUser = dbClient.userDao().selectByLogin(session, DEFAULT_LOGIN); assertThat(updatedUser.isActive()).isTrue(); assertThat(updatedUser.getName()).isEqualTo("Marius2"); assertThat(updatedUser.getEmail()).isEqualTo("marius2@mail.com"); assertThat(updatedUser.getScmAccountsAsList()).containsOnly("ma2"); assertThat(updatedUser.getCreatedAt()).isEqualTo(user.getCreatedAt()); assertThat(updatedUser.getUpdatedAt()).isGreaterThan(user.getCreatedAt()); List<SearchHit> indexUsers = es.getDocuments(UserIndexDefinition.INDEX_TYPE_USER); assertThat(indexUsers).hasSize(1); assertThat(indexUsers.get(0).getSource()) .contains( entry("login", DEFAULT_LOGIN), entry("name", "Marius2"), entry("email", "marius2@mail.com")); }
List<SearchHit> indexUsers = es.getDocuments(UserIndexDefinition.INDEX_TYPE_USER); assertThat(indexUsers).hasSize(1); assertThat(indexUsers.get(0).getSource()) .contains( entry("login", "user"),
SearchHit[] hits = rhits.getHits(); for (SearchHit hit: hits) { Map<String, Object> map = hit.getSource(); result.add(map);
private Optional<Document> toDocument(SearchHit hit) { Document document = Document.fromJSON(hit.getSource()); document.setDocumentID(hit.getId()); return Optional.of(document); } }
/** * 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 List<Map<String, Object>> getAllIndexedDocs(String index, String sourceType, String subMessage) throws IOException { getClient().admin().indices().refresh(new RefreshRequest()); SearchResponse response = getClient().prepareSearch(index) .setTypes(sourceType) .setFrom(0) .setSize(1000) .execute().actionGet(); List<Map<String, Object>> ret = new ArrayList<Map<String, Object>>(); for (SearchHit hit : response.getHits()) { Object o = null; if (subMessage == null) { o = hit.getSource(); } else { o = hit.getSource().get(subMessage); } ret.add((Map<String, Object>) (o)); } return ret; }