Java tutorial
/* * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.javaweb.elasticsearch.core; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.data.domain.Page; import java.util.ArrayList; import java.util.List; /** * ElasticsearchTemplate ?,?? * Spring Data Elasticsearch ,?ElasticsearchTemplate * * @author yz */ public class ElasticsearchTemplate implements ElasticsearchOperations { private final Client client; private final ElasticsearchConnection elasticsearchConnection; public ElasticsearchTemplate(ElasticsearchConnection elasticsearchConnection) { this.elasticsearchConnection = elasticsearchConnection; this.client = elasticsearchConnection.getClient(); } @Override public Client getClient() { return this.elasticsearchConnection.getClient(); } /** * ? * * @param searchRequest * @return */ @Override public long docCount(SearchRequest searchRequest) { return client.search(searchRequest).actionGet().getHits().totalHits(); } /** * ? * * @param searchRequest * @param clazz * @return * @throws IncorrectResultSizeDataAccessException */ @Override public <T> T queryForObject(SearchRequest searchRequest, Class<T> clazz) { List<T> list = queryForList(searchRequest, clazz); if (list.size() > 1) { new IncorrectResultSizeDataAccessException(list.size()).printStackTrace(); } return list.get(0); } /** * * * @param searchRequest * @param clazz * @return */ @Override public <T> List<T> queryForList(SearchRequest searchRequest, Class<T> clazz) { Page<T> pages = queryForPage(searchRequest, clazz); if (pages != null) { return pages.getContent(); } return new ArrayList<T>(); } /** * * * @param <T> * @param searchRequest * @param clazz * @return */ @Override public <T> Page<T> queryForPage(SearchRequest searchRequest, Class<T> clazz) { SearchResponse response = client.search(searchRequest).actionGet(); int from = searchRequest.source().from(); int size = searchRequest.source().size(); int pageNum = convertPageNumber(from, size); return new SimpleSearchResultMapper().mapResults(response, clazz, pageNum, size); } public SearchRequestBuilder startQueryBuilder(String[] index, String[] type) { return this.getClient().prepareSearch(index).setTypes(type); } public SearchRequestBuilder startQueryBuilder(String index, String type) { return startQueryBuilder(new String[] { index }, new String[] { type }); } public int convertElasticsearchPageNumber(int pageNum, int pageSize) { return (pageNum - 1) * pageSize; } public int convertPageNumber(int from, int size) { return from / size + 1; } }