Package org.codelibs.elasticsearch.web.robot.service

Source Code of org.codelibs.elasticsearch.web.robot.service.EsDataService

package org.codelibs.elasticsearch.web.robot.service;

import java.util.ArrayList;
import java.util.List;

import org.codelibs.elasticsearch.web.robot.entity.EsAccessResult;
import org.codelibs.robot.entity.AccessResult;
import org.codelibs.robot.service.DataService;
import org.codelibs.robot.util.AccessResultCallback;
import org.elasticsearch.action.index.IndexRequest.OpType;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.seasar.framework.beans.util.Beans;

public class EsDataService extends AbstractRobotService implements DataService {

    public int scrollTimeout = 60000;

    public int scrollSize = 100;

    @Override
    public void store(final AccessResult accessResult) {
        super.insert(accessResult, OpType.CREATE);
    }

    @Override
    public void update(final AccessResult accessResult) {
        store(accessResult);
    }

    @Override
    public void update(final List<AccessResult> accessResultList) {
        insertAll(accessResultList, OpType.INDEX);
    }

    @Override
    public int getCount(final String sessionId) {
        return (int) riverConfig.getClient().prepareCount(index)
                .setTypes(sessionId).execute().actionGet().getCount();
    }

    @Override
    public void delete(final String sessionId) {
        deleteBySessionId(sessionId);
    }

    @Override
    public AccessResult getAccessResult(final String sessionId, final String url) {
        return get(AccessResult.class, sessionId, url);
    }

    @Override
    public List<AccessResult> getAccessResultList(final String url,
            final boolean hasData) {
        final SearchResponse response = riverConfig.getClient()
                .prepareSearch(index).setTypes(type)
                .setQuery(QueryBuilders.termQuery(URL, url)).execute()
                .actionGet();
        final SearchHits hits = response.getHits();
        final List<AccessResult> accessResultList = new ArrayList<AccessResult>();
        if (hits.getTotalHits() != 0) {
            for (final SearchHit searchHit : hits.getHits()) {
                accessResultList.add(Beans
                        .createAndCopy(EsAccessResult.class,
                                searchHit.getSource())
                        .converter(new EsTimestampConverter(), timestampFields)
                        .excludesWhitespace().execute());
            }
        }
        return accessResultList;
    }

    @Override
    public void iterate(final String sessionId,
            final AccessResultCallback callback) {
        SearchResponse response = riverConfig
                .getClient()
                .prepareSearch(index)
                .setTypes(type)
                .setSearchType(SearchType.SCAN)
                .setScroll(new TimeValue(scrollTimeout))
                .setPostFilter(FilterBuilders.termFilter(SESSION_ID, sessionId))
                .setQuery(QueryBuilders.matchAllQuery()).setSize(scrollSize)
                .execute().actionGet();
        while (true) {
            final SearchHits searchHits = response.getHits();
            for (final SearchHit searchHit : searchHits) {
                final AccessResult accessResult = Beans
                        .createAndCopy(EsAccessResult.class,
                                searchHit.getSource())
                        .converter(new EsTimestampConverter(), timestampFields)
                        .excludesWhitespace().execute();
                callback.iterate(accessResult);
            }

            if (searchHits.hits().length == 0) {
                break;
            }
            response = riverConfig.getClient()
                    .prepareSearchScroll(response.getScrollId())
                    .setScroll(new TimeValue(scrollTimeout)).execute()
                    .actionGet();
        }
    }

    @Override
    public void iterateUrlDiff(final String oldSessionId,
            final String newSessionId,
            final AccessResultCallback accessResultCallback) {
        throw new UnsupportedOperationException("Unsupported.");
    }

}
TOP

Related Classes of org.codelibs.elasticsearch.web.robot.service.EsDataService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.