package crate.elasticsearch.searchinto;
import crate.elasticsearch.action.searchinto.SearchIntoContext;
import org.apache.lucene.search.Query;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import java.io.IOException;
import java.util.Map;
public class Writer {
private static final ESLogger logger = Loggers.getLogger(Writer.class);
private final Map<String, WriterCollectorFactory> collectors;
@Inject
public Writer(Map<String, WriterCollectorFactory> collectors) {
this.collectors = collectors;
}
public WriterResult execute(SearchIntoContext context) throws
WriterException {
logger.info("writing {}/{}", context.shardTarget().index(),
context.shardTarget().getShardId());
Query query = context.query();
context.version(true);
WriterCollector wc = collectors.get(context.targetType()).create(
context);
wc.open();
try {
context.searcher().search(query, wc);
} catch (IOException e) {
throw new WriterException(context, "Failed to write docs", e);
}
wc.close();
WriterResult res = wc.getResult();
logger.info("exported {} docs from {}/{}", res.getTotalWrites(),
context.shardTarget().index(),
context.shardTarget().getShardId());
return res;
}
}