searchengine/cpix/cpix/src/queryparser.cpp
changeset 8 6547bf8ca13a
child 24 65456528cac2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchengine/cpix/cpix/src/queryparser.cpp	Mon Jun 28 10:34:53 2010 +0530
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "queryParser.h"
+
+#include "cpixmaindefs.h"
+
+#include "initparams.h"
+
+#include "prefixqueryparser.h"
+
+#include "cpixexc.h"
+
+namespace Cpix {
+	
+	IQueryParser::~IQueryParser() {}
+	
+	CLuceneQueryParser::CLuceneQueryParser(const wchar_t* defaultField, 
+										  lucene::analysis::Analyzer& analyzer) 
+	: parser_() {
+		parser_.reset(_CLNEW lucene::queryParser::QueryParser(defaultField, &analyzer));
+	}
+	
+	CLuceneQueryParser::~CLuceneQueryParser() {}
+	
+	std::auto_ptr<lucene::search::Query> CLuceneQueryParser::parse(const wchar_t* query) {
+		return std::auto_ptr<lucene::search::Query>( parser_->parse(query) ); 
+	}
+
+	const wchar_t* CLuceneQueryParser::getField() const {
+		return parser_->getField();
+	}
+	
+	void CLuceneQueryParser::setDefaultOperator(cpix_QP_Operator op) {
+ 		parser_->setDefaultOperator(static_cast<int>(op)); 
+	}
+
+	PrefixOptQueryParser::PrefixOptQueryParser(std::auto_ptr<IQueryParser> parser) 
+	:	 
+	 	prefixOpt_(OPTIMIZED_PREFIX_MAX_LENGTH, 
+				   LCPIX_DEFAULT_FIELD, 
+				   LCPIX_DEFAULT_PREFIX_FIELD ),
+				           parser_( parser )
+	{}
+	
+	PrefixOptQueryParser::~PrefixOptQueryParser() {}
+	
+	std::auto_ptr<lucene::search::Query> PrefixOptQueryParser::parse(const wchar_t* query) {
+		return prefixOpt_.rewrite( parser_->parse(query) );
+	}
+	
+	const wchar_t* PrefixOptQueryParser::getField() const {
+		return parser_->getField();
+	}
+	
+	void PrefixOptQueryParser::setDefaultOperator(cpix_QP_Operator op) {
+		parser_->setDefaultOperator(op); 
+	}
+
+	CLuceneMultiFieldQueryParser::CLuceneMultiFieldQueryParser(
+			const wchar_t** fields, 
+			lucene::analysis::Analyzer& analyzer, 
+			lucene::queryParser::BoostMap& boostMap)
+	: parser_() {
+		parser_.reset(
+				_CLNEW lucene::queryParser::MultiFieldQueryParser( fields, &analyzer, &boostMap ));
+		
+	}
+	
+	CLuceneMultiFieldQueryParser::~CLuceneMultiFieldQueryParser() {}
+	
+	std::auto_ptr<lucene::search::Query> 
+		CLuceneMultiFieldQueryParser::parse(const wchar_t* query) {
+		return std::auto_ptr<lucene::search::Query>( parser_->parse( query ) );
+		
+	}
+	
+	const wchar_t* CLuceneMultiFieldQueryParser::getField() const {
+		THROW_CPIXEXC("Multi field query parser does not support getField operation"); 	
+	}
+	
+	void CLuceneMultiFieldQueryParser::setDefaultOperator(cpix_QP_Operator op) {
+		parser_->setDefaultOperator(static_cast<int>(op)); 
+	}
+	
+	IQueryParser* CreateCLuceneQueryParser(const wchar_t* defaultField, 
+										   lucene::analysis::Analyzer* analyzer) {
+		return 
+			new PrefixOptQueryParser(
+				std::auto_ptr<IQueryParser>(
+					new CLuceneQueryParser(defaultField, *analyzer)));
+	}
+	
+	IQueryParser* CreateCLuceneMultiFieldQueryParser(
+											const wchar_t* fields[], 
+											lucene::analysis::Analyzer* analyzer, 
+											lucene::queryParser::BoostMap* boostMap) {
+		return 
+			new PrefixOptQueryParser(
+				std::auto_ptr<IQueryParser>(
+					new CLuceneMultiFieldQueryParser(fields, 
+													 *analyzer,
+													 *boostMap)));
+		
+	}
+	
+	IQueryParser* CreatePrefixQueryParser(const wchar_t* field) {
+		return 
+			new PrefixOptQueryParser(
+				std::auto_ptr<IQueryParser>(
+					new PrefixQueryParser(field)));
+	}
+
+	
+}