/** * Use {@link #create(Retriever.Retriever, Retriever.Query)} instead. * <p/> * @param retriever */ public Strategy(Retriever retriever) { this.retriever = retriever; repository = retriever.getRepository(); collectors = new MasterCollector(); collectors.setRepository(repository); }
public void setStrategy(Strategy strategy) { setRetriever(strategy.retriever); this.strategy = strategy; strategy.collectors.add(this); }
@Override public void retrieveSegment(Strategy strategy) { strategy.collectors.reuse(); strategy.doMapTask(); strategy.collectors.postLoadFeatures(strategy.partition); strategy.collectors.finishSegmentRetrieval(); }
public Query retrieveSinglePass(Strategy strategy) { // implements local retrieval strategy //log.info("retrieveSinglePass %d %s", repository.getPartitions(), strategy.query.query); strategy.prepareAggregation(); HashSet<Integer> collected = new HashSet<Integer>(); if (strategy instanceof RetrievalModel) { for (int i = 0; i < repository.getPartitions(); i++) { Strategy results = retrieveSegment(strategy.query, i); for (int collector = 0; collector < results.collectors.size(); collector++) { Collector aggregator = strategy.collectors.get(collector); aggregator.aggregate(results.collectors.get(collector)); collected.add(collector); } } } else { Strategy results = retrieveSegment(strategy.query, -1); strategy.collectors = results.collectors; for (Collector c : results.collectors) { collected.add(results.collectors.indexOf(c)); } } strategy.collectors.finishReduce(); for (Collector sdf : strategy.collectors) { if (sdf instanceof CollectorCachable) repository.unloadStoredDynamicFeature(((CollectorCachable)sdf).getStoredDynamicFeature()); } return strategy.finishReduceTask(); }
} else { strategy.setQuery(q); strategy.collectors.reuse(); Collector aggregator = strategy.collectors.get(v.collectorid); v.collector.setStrategy(strategy); v.collector.decode(); aggregator.aggregate(v.collector); strategy.collectors.finishReduce(); q = strategy.finishReduceTask(); q.setVariantID(0);
public int getReducerID(Collector c) { //log.info("%s %s %s %d", c.getCanonicalName(), getReducers(), c.getReducerIDs(), getReducers().indexOf(c.getReducerIDs())); if (getReducers().size() == 0) return 0; else return getReducers().indexOf(c.getReducerName()); }
public void retrieveSegment(Strategy strategy) { strategy.prepareAggregation(); strategy.prepareRetrieval(); strategy.doMapTask(); strategy.collectors.postLoadFeatures(strategy.partition); strategy.collectors.finishSegmentRetrieval(); }
/** * After a retrieval-pass, the {@link Retriever} calls the results() function * in which the Strategy decides whether this was the final pass and results * are returned, or if a consecutive retrieval pass is required. * <p/> * @return {@link Query} object, which contains strategyclass=null and * queryresults if the final pass was processed, or a strategyclass with a * reformulated query if a consecutive retrieval pass is required. */ public Query finishReduceTask() { if (root.needsPrePass()) { //log.info("cascade needed prepass"); query.query = root.postReform(); query.setStrategyClassname(RetrievalModel.class.getCanonicalName()); } else { Collector c = collectors.getCollector(documentcollectorclass.getSimpleName()); if (c != null) { query.setStrategyClassname(null); if (collectors.size() > 0) { for (Document d : ((CollectorDocument) c).getRetrievedDocs()) query.add(d); } } } return query; }
strategy.prepareAggregation(); for (CollectorValue v : tfs) { Collector aggregator = strategy.collectors.get(v.collectorid); v.collector.setStrategy(strategy); v.collector.decode(); aggregator.aggregate(v.collector); strategy.collectors.finishReduce(); q = strategy.finishReduceTask();
termstring.openRead(); Document documents[] = ((CollectorDocument) collectors.get(0)).getRetrievedDocs(); HashMap<Integer, ExpansionTerm> termDocFrequencies = getTermDocFrequencies(documents); HashMap<Document, Double> documentposteriors = getDocumentPosteriors(documents, Math.E);
@Override public void write(DataOutput out) { BufferDelayedWriter writer = new BufferDelayedWriter(); writer.writeC(collector.strategy.collectors.indexOf( collector)); writer.write(collector.getCanonicalName()); writer.writeC(partition); collector.writeKey(writer); collector.writeValue(writer); writer.writeBuffer(out); writer = null; }
public int getReducerID() { return strategy.collectors.getReducerID(this); }
/** * Retrieves and processes the results for a single partition. This is * typically used in Mappers that only process the results for a single * partition and send the results to the reducer. * <p/> * @param partition id of the partition to retrieveQueries * @return the MasterCollector containing the aggregated results of all * segments.= */ @Override public void doMapTask() { if (root.containednodes.size() > 0) { PostingIterator pi = retriever.getPostingIterator(this, partition); for (Document d = pi.next(); d != null; d = pi.next()) { collectors.collect(d); } } }
public Query retrieveSinglePass(Strategy strategy) { // implements local retrieval strategy //log.info("retrieveSinglePass %d %s", repository.getPartitions(), strategy.query.query); strategy.prepareAggregation(); HashSet<Integer> collected = new HashSet<Integer>(); if (strategy instanceof RetrievalModel) { for (int i = 0; i < repository.getPartitions(); i++) { Strategy results = retrieveSegment(strategy.query, i); for (int collector = 0; collector < results.collectors.size(); collector++) { Collector aggregator = strategy.collectors.get(collector); aggregator.aggregate(results.collectors.get(collector)); collected.add(collector); } } } else { Strategy results = retrieveSegment(strategy.query, -1); strategy.collectors = results.collectors; for (Collector c : results.collectors) { collected.add(results.collectors.indexOf(c)); } } strategy.collectors.finishReduce(); for (Collector sdf : strategy.collectors) { if (sdf instanceof CollectorCachable) repository.unloadStoredDynamicFeature(((CollectorCachable)sdf).getStoredDynamicFeature()); } return strategy.finishReduceTask(); }
} else { strategy.setQuery(q); strategy.collectors.reuse(); Collector aggregator = strategy.collectors.get(v.collectorid); v.collector.setStrategy(strategy); v.collector.decode(); aggregator.aggregate(v.collector); strategy.collectors.finishReduce(); q = strategy.finishReduceTask(); q.setVariantID(0);
public int getReducerID(Collector c) { //log.info("%s %s %s %d", c.getCanonicalName(), getReducers(), c.getReducerIDs(), getReducers().indexOf(c.getReducerIDs())); if (getReducers().size() == 0) return 0; else return getReducers().indexOf(c.getReducerName()); }
public void retrieveSegment(Strategy strategy) { strategy.prepareAggregation(); strategy.prepareRetrieval(); strategy.doMapTask(); strategy.collectors.postLoadFeatures(strategy.partition); strategy.collectors.finishSegmentRetrieval(); }
/** * After a retrieval-pass, the {@link Retriever} calls the results() function * in which the Strategy decides whether this was the final pass and results * are returned, or if a consecutive retrieval pass is required. * <p/> * @return {@link Query} object, which contains strategyclass=null and * queryresults if the final pass was processed, or a strategyclass with a * reformulated query if a consecutive retrieval pass is required. */ public Query finishReduceTask() { if (root.needsPrePass()) { //log.info("cascade needed prepass"); query.query = root.postReform(); query.setStrategyClassname(RetrievalModel.class.getCanonicalName()); } else { Collector c = collectors.getCollector(documentcollectorclass.getSimpleName()); if (c != null) { query.setStrategyClassname(null); if (collectors.size() > 0) { for (Document d : ((CollectorDocument) c).getRetrievedDocs()) query.add(d); } } } return query; }