/*------------------------------------------------------------------------------ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team * * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ #ifndef _lucene_search_MultiTermQuery_ #define _lucene_search_MultiTermQuery_ #if defined(_LUCENE_PRAGMA_ONCE) # pragma once #endif #include "CLucene/util/StringBuffer.h" #include "CLucene/index/IndexReader.h" #include "CLucene/index/Term.h" #include "CLucene/index/Terms.h" #include "FilteredTermEnum.h" #include "SearchHeader.h" #include "BooleanQuery.h" #include "TermQuery.h" CL_NS_DEF(search) /** * A {@link Query} that matches documents containing a subset of terms provided * by a {@link FilteredTermEnum} enumeration. *

* MultiTermQuery is not designed to be used by itself. *
* The reason being that it is not intialized with a {@link FilteredTermEnum} * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided. *

* For example, {@link WildcardQuery} and {@link FuzzyQuery} extend * MultiTermQuery to provide {@link WildcardTermEnum} and * {@link FuzzyTermEnum}, respectively. */ class MultiTermQuery: public Query { private: CL_NS(index)::Term* term; protected: MultiTermQuery(const MultiTermQuery& clone); /** Construct the enumeration to be used, expanding the pattern term. */ virtual FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader) = 0; public: /** Constructs a query for terms matching term. */ MultiTermQuery(CL_NS(index)::Term* t); virtual ~MultiTermQuery(); /** Returns the pattern term. */ CL_NS(index)::Term* getTerm(bool pointer=true) const; Query* combine(Query** queries); /** Prints a user-readable version of this query. */ TCHAR* toString(const TCHAR* field) const; Query* rewrite(CL_NS(index)::IndexReader* reader); }; CL_NS_END #endif