org.javaweb.elasticsearch.core.ElasticsearchTemplate.java Source code

Java tutorial

Introduction

Here is the source code for org.javaweb.elasticsearch.core.ElasticsearchTemplate.java

Source

/*
 * 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;
    }

}