ConstQuery.java
- /*
- * ConstQuery.java
- *
- * Copyright (c) 2007-2011, The University of Sheffield.
- *
- * This file is part of GATE MÃmir (see http://gate.ac.uk/family/mimir.html),
- * and is free software, licenced under the GNU Lesser General Public License,
- * Version 3, June 2007 (also included with this distribution as file
- * LICENCE-LGPL3.html).
- *
- * Valentin Tablan, 22 Nov 2012
- *
- * $Id: ConstQuery.java 16782 2013-08-14 08:40:44Z valyt $
- */
- package gate.mimir.search.query;
- import gate.mimir.search.QueryEngine;
- import it.unimi.di.big.mg4j.index.Index;
- import it.unimi.di.big.mg4j.search.visitor.DocumentIteratorVisitor;
- import it.unimi.dsi.fastutil.objects.ReferenceArraySet;
- import it.unimi.dsi.fastutil.objects.ReferenceSet;
- import java.io.IOException;
- /**
- * A query that returns a pre-defined (constant) list of document IDs. This
- * query type does not support positions, so it returns no hits.
- * One example usage for this type of query is as an operand to an AND operator
- * in order to restrict the results to a given set of documents.
- */
- public class ConstQuery implements QueryNode {
-
- /**
- * Serialization ID.
- */
- private static final long serialVersionUID = 4259330863001338150L;
- /**
- * Executor implementation for {@link ConstQuery}. It returns document IDs
- * from the predefined list, and no positions.
- */
- public static class ConstQueryExecutor extends AbstractQueryExecutor {
-
- public ConstQueryExecutor(ConstQuery qNode, QueryEngine engine) {
- super(engine, qNode);
- this.documentIds = qNode.documentIds;
- latestDocumentPosition = -1;
- }
-
- /**
- * The position in the constant list of document IDs of the latest returned
- * document.
- */
- private int latestDocumentPosition;
-
- /**
- * The predefined list of document IDs.
- */
- private long[] documentIds;
-
- private ReferenceSet<Index> indices;
-
- /* (non-Javadoc)
- * @see gate.mimir.search.query.QueryExecutor#nextDocument(long)
- */
- @Override
- public long nextDocument(long greaterThan) throws IOException {
- do {
- latestDocumentPosition++;
- } while(latestDocumentPosition < documentIds.length &&
- documentIds[latestDocumentPosition] <= greaterThan);
- if(latestDocumentPosition < documentIds.length) {
- latestDocument = documentIds[latestDocumentPosition];
- } else {
- latestDocument = -1;
- }
- return latestDocument;
- }
- /**
- * This query executor type does not support positions, so it always returns
- * null.
- * @see gate.mimir.search.query.QueryExecutor#nextHit()
- */
- @Override
- public Binding nextHit() throws IOException {
- return null;
- }
- /**
- * Returns an empty set of indices.
- * @see it.unimi.di.big.mg4j.search.DocumentIterator#indices()
- */
- @Override
- public ReferenceSet<Index> indices() {
- if(indices == null) {
- indices = new ReferenceArraySet<Index>();
- }
- return indices;
- }
- /**
- * Always returns null.
- * @see it.unimi.di.big.mg4j.search.DocumentIterator#accept(it.unimi.di.big.mg4j.search.visitor.DocumentIteratorVisitor)
- */
- @Override
- public <T> T accept(DocumentIteratorVisitor<T> visitor) throws IOException {
- return null;
- }
- /**
- * Always returns null
- * @see it.unimi.di.big.mg4j.search.DocumentIterator#acceptOnTruePaths(it.unimi.di.big.mg4j.search.visitor.DocumentIteratorVisitor)
- */
- @Override
- public <T> T acceptOnTruePaths(DocumentIteratorVisitor<T> visitor)
- throws IOException {
- return null;
- }
- }
-
- /* (non-Javadoc)
- * @see gate.mimir.search.query.QueryNode#getQueryExecutor(gate.mimir.search.QueryEngine)
- */
- @Override
- public QueryExecutor getQueryExecutor(QueryEngine engine) throws IOException {
- return new ConstQueryExecutor(this, engine);
- }
-
-
- /**
- * Creates a new ConstQuery query.
- * @param documentIds the document IDs (in ascending order) that should be
- * returned when this query is executed.
- */
- public ConstQuery(long[] documentIds) {
- this.documentIds = documentIds;
- }
- private long[] documentIds;
- /**
- * @return the documentIds
- */
- public long[] getDocumentIds() {
- return documentIds;
- }
-
- }