@Override public <T> void refresh(Class<T> clazz, boolean waitForOperation) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); client .admin() .indices() .refresh(refreshRequest(persistentEntity.getIndexName()).force(waitForOperation)) .actionGet(); }
@Override public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); client .prepareDeleteByQuery(persistentEntity.getIndexName()) .setTypes(persistentEntity.getIndexType()) .setQuery(deleteQuery.getQuery()) .execute() .actionGet(); }
@Override public <T> T queryForObject(GetQuery query, Class<T> clazz, GetResultMapper mapper) { ElasticsearchPersistentEntity<T> persistentEntity = getPersistentEntityFor(clazz); GetResponse response = client .prepareGet( persistentEntity.getIndexName(), persistentEntity.getIndexType(), query.getId()) .execute() .actionGet(); T entity = mapper.mapResult(response, clazz); return entity; }
@Override public <T> Page<T> moreLikeThis(MoreLikeThisQuery query, Class<T> clazz) { int startRecord = 0; ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); String indexName = isNotBlank(query.getIndexName()) ? query.getIndexName() : persistentEntity.getIndexName(); String type = isNotBlank(query.getType()) ? query.getType() : persistentEntity.getIndexType(); Assert.notNull(indexName, "No 'indexName' defined for MoreLikeThisQuery"); Assert.notNull(type, "No 'type' defined for MoreLikeThisQuery"); Assert.notNull(query.getId(), "No document id defined for MoreLikeThisQuery"); MoreLikeThisRequestBuilder requestBuilder = client.prepareMoreLikeThis(indexName, type, query.getId()); if (query.getPageable() != null) { startRecord = query.getPageable().getPageNumber() * query.getPageable().getPageSize(); requestBuilder.setSearchSize(query.getPageable().getPageSize()); } requestBuilder.setSearchFrom(startRecord); if (isNotEmpty(query.getSearchIndices())) { requestBuilder.setSearchIndices(toArray(query.getSearchIndices())); } if (isNotEmpty(query.getSearchTypes())) { requestBuilder.setSearchTypes(toArray(query.getSearchTypes())); } if (isNotEmpty(query.getFields())) { requestBuilder.setField(toArray(query.getFields())); } if (isNotBlank(query.getRouting())) { requestBuilder.setRouting(query.getRouting()); } if (query.getPercentTermsToMatch() != null) { requestBuilder.setPercentTermsToMatch(query.getPercentTermsToMatch()); } if (query.getMinTermFreq() != null) { requestBuilder.setMinTermFreq(query.getMinTermFreq()); } if (query.getMaxQueryTerms() != null) { requestBuilder.maxQueryTerms(query.getMaxQueryTerms()); } if (isNotEmpty(query.getStopWords())) { requestBuilder.setStopWords(toArray(query.getStopWords())); } if (query.getMinDocFreq() != null) { requestBuilder.setMinDocFreq(query.getMinDocFreq()); } if (query.getMaxDocFreq() != null) { requestBuilder.setMaxDocFreq(query.getMaxDocFreq()); } if (query.getMinWordLen() != null) { requestBuilder.setMinWordLen(query.getMinWordLen()); } if (query.getMaxWordLen() != null) { requestBuilder.setMaxWordLen(query.getMaxWordLen()); } if (query.getBoostTerms() != null) { requestBuilder.setBoostTerms(query.getBoostTerms()); } SearchResponse response = requestBuilder.execute().actionGet(); return resultsMapper.mapResults(response, clazz, query.getPageable()); }
@Override public <T> String delete(Class<T> clazz, String id) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); return delete(persistentEntity.getIndexName(), persistentEntity.getIndexType(), id); }