org.apache.lucene.index.ExitableDirectoryReader Java Examples

The following examples show how to use org.apache.lucene.index.ExitableDirectoryReader. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Grouping.java    From lucene-solr with Apache License 2.0 6 votes vote down vote up
/**
 * Invokes search with the specified filter and collector.  
 * If a time limit has been specified, wrap the collector in a TimeLimitingCollector
 */
private void searchWithTimeLimiter(final Filter luceneFilter, Collector collector) throws IOException {
  if (cmd.getTimeAllowed() > 0) {
    if (timeLimitingCollector == null) {
      timeLimitingCollector = new TimeLimitingCollector(collector, TimeLimitingCollector.getGlobalCounter(), cmd.getTimeAllowed());
    } else {
      /*
       * This is so the same timer can be used for grouping's multiple phases.   
       * We don't want to create a new TimeLimitingCollector for each phase because that would 
       * reset the timer for each phase.  If time runs out during the first phase, the 
       * second phase should timeout quickly.
       */
      timeLimitingCollector.setCollector(collector);
    }
    collector = timeLimitingCollector;
  }
  try {
    searcher.search(QueryUtils.combineQueryAndFilter(query, luceneFilter), collector);
  } catch (TimeLimitingCollector.TimeExceededException | ExitableDirectoryReader.ExitingReaderException x) {
    log.warn("Query: {}; {}", query, x.getMessage());
    qr.setPartialResults(true);
  }
}
 
Example #2
Source File: MtasSolrSearchComponent.java    From mtas with Apache License 2.0 6 votes vote down vote up
@Override
public void handleResponses(ResponseBuilder rb, ShardRequest sreq) {
	 // System.out
	 // .println(System.nanoTime() + " - " + Thread.currentThread().getId()
	 // + " - " + rb.req.getParams().getBool(ShardParams.IS_SHARD, false)
	 // + " HANDLERESPONSES " + rb.stage + " " + rb.req.getParamString());
	MtasSolrStatus solrStatus = Objects
			.requireNonNull((MtasSolrStatus) rb.req.getContext().get(MtasSolrStatus.class), "couldn't find status");
	solrStatus.setStage(rb.stage);
	try {
		if (rb.req.getParams().getBool(PARAM_MTAS, false)) {

			// do nothing
		}
	} catch (ExitableDirectoryReader.ExitingReaderException e) {
		solrStatus.setError(e.getMessage());
	}
}
 
Example #3
Source File: CommandHandler.java    From lucene-solr with Apache License 2.0 5 votes vote down vote up
/**
 * Invokes search with the specified filter and collector.  
 * If a time limit has been specified then wrap the collector in the TimeLimitingCollector
 */
private void searchWithTimeLimiter(Query query, 
                                   ProcessedFilter filter, 
                                   Collector collector) throws IOException {
  if (queryCommand.getTimeAllowed() > 0 ) {
    collector = new TimeLimitingCollector(collector, TimeLimitingCollector.getGlobalCounter(), queryCommand.getTimeAllowed());
  }

  TotalHitCountCollector hitCountCollector = new TotalHitCountCollector();
  if (includeHitCount) {
    collector = MultiCollector.wrap(collector, hitCountCollector);
  }

  query = QueryUtils.combineQueryAndFilter(query, filter.filter);

  if (filter.postFilter != null) {
    filter.postFilter.setLastDelegate(collector);
    collector = filter.postFilter;
  }

  try {
    searcher.search(query, collector);
  } catch (TimeLimitingCollector.TimeExceededException | ExitableDirectoryReader.ExitingReaderException x) {
    partialResults = true;
    log.warn("Query: {}; {}", query, x.getMessage());
  }

  if (includeHitCount) {
    totalHitCount = hitCountCollector.getTotalHits();
  }
}
 
Example #4
Source File: TrollingIndexReaderFactory.java    From lucene-solr with Apache License 2.0 5 votes vote down vote up
private ExitableDirectoryReader wrap(DirectoryReader newReader) throws IOException {
  return new ExitableDirectoryReader(newReader, new QueryTimeout() {
    @Override
    public boolean shouldExit() {
      return trap!=null && trap.shouldExit();
    }
    
    @Override
    public String toString() {
      return ""+trap;
    }
  });
}
 
Example #5
Source File: SolrIndexSearcher.java    From lucene-solr with Apache License 2.0 4 votes vote down vote up
/**
 * Builds the necessary collector chain (via delegate wrapping) and executes the query against it. This method takes
 * into consideration both the explicitly provided collector and postFilter as well as any needed collector wrappers
 * for dealing with options specified in the QueryCommand.
 * @return The collector used for search
 */
private Collector buildAndRunCollectorChain(QueryResult qr, Query query, Collector collector, QueryCommand cmd,
    DelegatingCollector postFilter) throws IOException {

  EarlyTerminatingSortingCollector earlyTerminatingSortingCollector = null;
  if (cmd.getSegmentTerminateEarly()) {
    final Sort cmdSort = cmd.getSort();
    final int cmdLen = cmd.getLen();
    final Sort mergeSort = core.getSolrCoreState().getMergePolicySort();

    if (cmdSort == null || cmdLen <= 0 || mergeSort == null ||
        !EarlyTerminatingSortingCollector.canEarlyTerminate(cmdSort, mergeSort)) {
      log.warn("unsupported combination: segmentTerminateEarly=true cmdSort={} cmdLen={} mergeSort={}", cmdSort, cmdLen, mergeSort);
    } else {
      collector = earlyTerminatingSortingCollector = new EarlyTerminatingSortingCollector(collector, cmdSort, cmd.getLen());
    }
  }

  final boolean terminateEarly = cmd.getTerminateEarly();
  if (terminateEarly) {
    collector = new EarlyTerminatingCollector(collector, cmd.getLen());
  }

  final long timeAllowed = cmd.getTimeAllowed();
  if (timeAllowed > 0) {
    collector = new TimeLimitingCollector(collector, TimeLimitingCollector.getGlobalCounter(), timeAllowed);
  }

  if (postFilter != null) {
    postFilter.setLastDelegate(collector);
    collector = postFilter;
  }

  try {
    super.search(query, collector);
  } catch (TimeLimitingCollector.TimeExceededException | ExitableDirectoryReader.ExitingReaderException x) {
    log.warn("Query: [{}]; {}", query, x.getMessage());
    qr.setPartialResults(true);
  } catch (EarlyTerminatingCollectorException etce) {
    if (collector instanceof DelegatingCollector) {
      ((DelegatingCollector) collector).finish();
    }
    throw etce;
  } finally {
    if (earlyTerminatingSortingCollector != null) {
      qr.setSegmentTerminatedEarly(earlyTerminatingSortingCollector.terminatedEarly());
    }
  }
  if (collector instanceof DelegatingCollector) {
    ((DelegatingCollector) collector).finish();
  }
  return collector;
}
 
Example #6
Source File: MtasSolrSearchComponent.java    From mtas with Apache License 2.0 4 votes vote down vote up
@Override
public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) {
	 // System.out
	 // .println(System.nanoTime() + " - " + Thread.currentThread().getId()
	 // + " - " + rb.req.getParams().getBool(ShardParams.IS_SHARD, false)
	 // + " MODIFY REQUEST " + rb.stage + " " + rb.req.getParamString());
	MtasSolrStatus solrStatus = Objects
			.requireNonNull((MtasSolrStatus) rb.req.getContext().get(MtasSolrStatus.class), "couldn't find status");
	solrStatus.setStage(rb.stage);
	try {
		if (sreq.params.getBool(PARAM_MTAS, false)) {
			if (sreq.params.getBool(MtasSolrComponentStatus.PARAM_MTAS_STATUS, false)) {
				searchStatus.modifyRequest(rb, who, sreq);
			} else if (requestHandler != null) {
				sreq.params.add(MtasSolrComponentStatus.PARAM_MTAS_STATUS, CommonParams.TRUE);
			}
			if (requestHandler != null) {
				sreq.params.add(MtasSolrComponentStatus.PARAM_MTAS_STATUS + "."
						+ MtasSolrComponentStatus.NAME_MTAS_STATUS_KEY, solrStatus.shardKey(rb.stage));
			}
			if (sreq.params.getBool(MtasSolrComponentVersion.PARAM_MTAS_VERSION, false)) {
				searchVersion.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentStats.PARAM_MTAS_STATS, false)) {
				searchStats.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentTermvector.PARAM_MTAS_TERMVECTOR, false)) {
				searchTermvector.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentPrefix.PARAM_MTAS_PREFIX, false)) {
				searchPrefix.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentFacet.PARAM_MTAS_FACET, false)) {
				searchFacet.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentCollection.PARAM_MTAS_COLLECTION, false)) {
				searchCollection.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentGroup.PARAM_MTAS_GROUP, false)) {
				searchGroup.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentList.PARAM_MTAS_LIST, false)) {
				searchList.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentDocument.PARAM_MTAS_DOCUMENT, false)) {
				searchDocument.modifyRequest(rb, who, sreq);
			}
			if (sreq.params.getBool(MtasSolrComponentKwic.PARAM_MTAS_KWIC, false)) {
				searchKwic.modifyRequest(rb, who, sreq);
			}
		}
	} catch (ExitableDirectoryReader.ExitingReaderException e) {
		solrStatus.setError(e.getMessage());
	}
}
 
Example #7
Source File: MtasSolrSearchComponent.java    From mtas with Apache License 2.0 4 votes vote down vote up
@Override
public void finishStage(ResponseBuilder rb) {
	 // System.out
	 // .println(System.nanoTime() + " - " + Thread.currentThread().getId()
	 //  + " - " + rb.req.getParams().getBool(ShardParams.IS_SHARD, false)
	 // + " FINISHRESPONSES " + rb.stage + " " + rb.req.getParamString());
	MtasSolrStatus solrStatus = Objects
			.requireNonNull((MtasSolrStatus) rb.req.getContext().get(MtasSolrStatus.class), "couldn't find status");
	solrStatus.setStage(rb.stage);
	try {
		if (rb.stage == ResponseBuilder.STAGE_EXECUTE_QUERY) {
			Status status = solrStatus.status();
			if (status.numberDocumentsFound == null) {
				status.numberDocumentsFound = rb.getNumberDocumentsFound();
			}
			// try to finish status from get fields stage
		} else if (rb.stage >= ResponseBuilder.STAGE_GET_FIELDS) {
			finishStatus(solrStatus);
		}
		if (rb.req.getParams().getBool(PARAM_MTAS, false)) {
			if (rb.req.getParams().getBool(MtasSolrComponentVersion.PARAM_MTAS_VERSION, false)) {
				searchVersion.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentStats.PARAM_MTAS_STATS, false)) {
				searchStats.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentTermvector.PARAM_MTAS_TERMVECTOR, false)) {
				searchTermvector.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentPrefix.PARAM_MTAS_PREFIX, false)) {
				searchPrefix.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentFacet.PARAM_MTAS_FACET, false)) {
				searchFacet.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentCollection.PARAM_MTAS_COLLECTION, false)) {
				searchCollection.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentGroup.PARAM_MTAS_GROUP, false)) {
				searchGroup.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentList.PARAM_MTAS_LIST, false)) {
				searchList.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentDocument.PARAM_MTAS_DOCUMENT, false)) {
				searchDocument.finishStage(rb);
			}
			if (rb.req.getParams().getBool(MtasSolrComponentKwic.PARAM_MTAS_KWIC, false)) {
				searchKwic.finishStage(rb);
			}
			mtasSolrResultMerge.merge(rb);
		}
	} catch (ExitableDirectoryReader.ExitingReaderException e) {
		solrStatus.setError(e.getMessage());
	}
}