searchengine/cpix/cpix/src/queryparser.cpp
author hgs
Fri, 15 Oct 2010 12:09:28 +0530
changeset 24 65456528cac2
parent 8 6547bf8ca13a
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include "queryParser.h"
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include "cpixmaindefs.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "initparams.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include "prefixqueryparser.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include "cpixexc.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
namespace Cpix {
hgs
parents:
diff changeset
    30
	
hgs
parents:
diff changeset
    31
	IQueryParser::~IQueryParser() {}
hgs
parents:
diff changeset
    32
	
24
hgs
parents: 8
diff changeset
    33
	LuceneQueryParser::LuceneQueryParser(const wchar_t* defaultField, 
8
hgs
parents:
diff changeset
    34
										  lucene::analysis::Analyzer& analyzer) 
hgs
parents:
diff changeset
    35
	: parser_() {
hgs
parents:
diff changeset
    36
		parser_.reset(_CLNEW lucene::queryParser::QueryParser(defaultField, &analyzer));
hgs
parents:
diff changeset
    37
	}
hgs
parents:
diff changeset
    38
	
24
hgs
parents: 8
diff changeset
    39
	LuceneQueryParser::~LuceneQueryParser() {}
8
hgs
parents:
diff changeset
    40
	
24
hgs
parents: 8
diff changeset
    41
	std::auto_ptr<lucene::search::Query> LuceneQueryParser::parse(const wchar_t* query) {
8
hgs
parents:
diff changeset
    42
		return std::auto_ptr<lucene::search::Query>( parser_->parse(query) ); 
hgs
parents:
diff changeset
    43
	}
hgs
parents:
diff changeset
    44
24
hgs
parents: 8
diff changeset
    45
	const wchar_t* LuceneQueryParser::getField() const {
8
hgs
parents:
diff changeset
    46
		return parser_->getField();
hgs
parents:
diff changeset
    47
	}
hgs
parents:
diff changeset
    48
	
24
hgs
parents: 8
diff changeset
    49
	void LuceneQueryParser::setDefaultOperator(cpix_QP_Operator op) {
8
hgs
parents:
diff changeset
    50
 		parser_->setDefaultOperator(static_cast<int>(op)); 
hgs
parents:
diff changeset
    51
	}
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
	PrefixOptQueryParser::PrefixOptQueryParser(std::auto_ptr<IQueryParser> parser) 
hgs
parents:
diff changeset
    54
	:	 
hgs
parents:
diff changeset
    55
	 	prefixOpt_(OPTIMIZED_PREFIX_MAX_LENGTH, 
hgs
parents:
diff changeset
    56
				   LCPIX_DEFAULT_FIELD, 
hgs
parents:
diff changeset
    57
				   LCPIX_DEFAULT_PREFIX_FIELD ),
hgs
parents:
diff changeset
    58
				           parser_( parser )
hgs
parents:
diff changeset
    59
	{}
hgs
parents:
diff changeset
    60
	
hgs
parents:
diff changeset
    61
	PrefixOptQueryParser::~PrefixOptQueryParser() {}
hgs
parents:
diff changeset
    62
	
hgs
parents:
diff changeset
    63
	std::auto_ptr<lucene::search::Query> PrefixOptQueryParser::parse(const wchar_t* query) {
hgs
parents:
diff changeset
    64
		return prefixOpt_.rewrite( parser_->parse(query) );
hgs
parents:
diff changeset
    65
	}
hgs
parents:
diff changeset
    66
	
hgs
parents:
diff changeset
    67
	const wchar_t* PrefixOptQueryParser::getField() const {
hgs
parents:
diff changeset
    68
		return parser_->getField();
hgs
parents:
diff changeset
    69
	}
hgs
parents:
diff changeset
    70
	
hgs
parents:
diff changeset
    71
	void PrefixOptQueryParser::setDefaultOperator(cpix_QP_Operator op) {
hgs
parents:
diff changeset
    72
		parser_->setDefaultOperator(op); 
hgs
parents:
diff changeset
    73
	}
hgs
parents:
diff changeset
    74
24
hgs
parents: 8
diff changeset
    75
	LuceneMultiFieldQueryParser::LuceneMultiFieldQueryParser(
8
hgs
parents:
diff changeset
    76
			const wchar_t** fields, 
hgs
parents:
diff changeset
    77
			lucene::analysis::Analyzer& analyzer, 
hgs
parents:
diff changeset
    78
			lucene::queryParser::BoostMap& boostMap)
hgs
parents:
diff changeset
    79
	: parser_() {
hgs
parents:
diff changeset
    80
		parser_.reset(
hgs
parents:
diff changeset
    81
				_CLNEW lucene::queryParser::MultiFieldQueryParser( fields, &analyzer, &boostMap ));
hgs
parents:
diff changeset
    82
		
hgs
parents:
diff changeset
    83
	}
hgs
parents:
diff changeset
    84
	
24
hgs
parents: 8
diff changeset
    85
	LuceneMultiFieldQueryParser::~LuceneMultiFieldQueryParser() {}
8
hgs
parents:
diff changeset
    86
	
hgs
parents:
diff changeset
    87
	std::auto_ptr<lucene::search::Query> 
24
hgs
parents: 8
diff changeset
    88
		LuceneMultiFieldQueryParser::parse(const wchar_t* query) {
8
hgs
parents:
diff changeset
    89
		return std::auto_ptr<lucene::search::Query>( parser_->parse( query ) );
hgs
parents:
diff changeset
    90
		
hgs
parents:
diff changeset
    91
	}
hgs
parents:
diff changeset
    92
	
24
hgs
parents: 8
diff changeset
    93
	const wchar_t* LuceneMultiFieldQueryParser::getField() const {
8
hgs
parents:
diff changeset
    94
		THROW_CPIXEXC("Multi field query parser does not support getField operation"); 	
hgs
parents:
diff changeset
    95
	}
hgs
parents:
diff changeset
    96
	
24
hgs
parents: 8
diff changeset
    97
	void LuceneMultiFieldQueryParser::setDefaultOperator(cpix_QP_Operator op) {
8
hgs
parents:
diff changeset
    98
		parser_->setDefaultOperator(static_cast<int>(op)); 
hgs
parents:
diff changeset
    99
	}
hgs
parents:
diff changeset
   100
	
hgs
parents:
diff changeset
   101
	IQueryParser* CreateCLuceneQueryParser(const wchar_t* defaultField, 
hgs
parents:
diff changeset
   102
										   lucene::analysis::Analyzer* analyzer) {
hgs
parents:
diff changeset
   103
		return 
hgs
parents:
diff changeset
   104
			new PrefixOptQueryParser(
hgs
parents:
diff changeset
   105
				std::auto_ptr<IQueryParser>(
24
hgs
parents: 8
diff changeset
   106
					new LuceneQueryParser(defaultField, *analyzer)));
8
hgs
parents:
diff changeset
   107
	}
hgs
parents:
diff changeset
   108
	
hgs
parents:
diff changeset
   109
	IQueryParser* CreateCLuceneMultiFieldQueryParser(
hgs
parents:
diff changeset
   110
											const wchar_t* fields[], 
hgs
parents:
diff changeset
   111
											lucene::analysis::Analyzer* analyzer, 
hgs
parents:
diff changeset
   112
											lucene::queryParser::BoostMap* boostMap) {
hgs
parents:
diff changeset
   113
		return 
hgs
parents:
diff changeset
   114
			new PrefixOptQueryParser(
hgs
parents:
diff changeset
   115
				std::auto_ptr<IQueryParser>(
24
hgs
parents: 8
diff changeset
   116
					new LuceneMultiFieldQueryParser(fields, 
8
hgs
parents:
diff changeset
   117
													 *analyzer,
hgs
parents:
diff changeset
   118
													 *boostMap)));
hgs
parents:
diff changeset
   119
		
hgs
parents:
diff changeset
   120
	}
hgs
parents:
diff changeset
   121
	
hgs
parents:
diff changeset
   122
	IQueryParser* CreatePrefixQueryParser(const wchar_t* field) {
hgs
parents:
diff changeset
   123
		return 
hgs
parents:
diff changeset
   124
			new PrefixOptQueryParser(
hgs
parents:
diff changeset
   125
				std::auto_ptr<IQueryParser>(
hgs
parents:
diff changeset
   126
					new PrefixQueryParser(field)));
hgs
parents:
diff changeset
   127
	}
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
	
hgs
parents:
diff changeset
   130
}