Query* MultiFieldQueryParser::getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop){
	if (field == NULL) {
		vector<BooleanClause*> clauses;
		for (int i = 0; fields[i]!=NULL; ++i) {
			Query* q = QueryParser::getFieldQuery(fields[i], queryText);
			if (q != NULL) {
				//If the user passes a map of boosts
				if (boosts != NULL) {
					//Get the boost from the map and apply them
            BoostMap::const_iterator itr = boosts->find((TCHAR*)fields[i]);
            if (itr != boosts->end()) {
						q->setBoost(itr->second);
					}
				}
				if (q->instanceOf(PhraseQuery::getClassName())) {
					((PhraseQuery*)q)->setSlop(slop);
				}
        if (q->instanceOf(MultiPhraseQuery::getClassName())) {
					((MultiPhraseQuery*) q)->setSlop(slop);
				}
				clauses.push_back(_CLNEW BooleanClause(q, true, BooleanClause::SHOULD));
			}
		}
		if (clauses.size() == 0)  // happens for stopwords
			return NULL;
		return QueryParser::getBooleanQuery(clauses, true);
	}else{
		return QueryParser::getFieldQuery(field, queryText);
	}
}
Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){
	if (field == NULL) {
		vector<BooleanClause*> clauses;
		for (int i = 0; fields[i]!=NULL; ++i) {
			Query* q = QueryParser::GetFieldQuery(fields[i], queryText);
			if (q != NULL) {
				if (q->getQueryName() == PhraseQuery::getClassName()) {
					((PhraseQuery*)q)->setSlop(slop);
				}
				//if (q instanceof MultiPhraseQuery) {
				//	((MultiPhraseQuery) q).setSlop(slop);
				//}
				q = QueryAddedCallback(fields[i], q);
				if ( q )
					clauses.push_back(_CLNEW BooleanClause(q, true, false,false));
			}
		}
		if (clauses.size() == 0)  // happens for stopwords
			return NULL;
		return QueryParser::GetBooleanQuery(clauses);
	}else{
		Query* q = QueryParser::GetFieldQuery(field, queryText);
		if ( q )
			q = QueryAddedCallback(field,q);
		return q;
	}
}
Exemple #3
0
  void BooleanQuery::add(Query* query, const bool deleteQuery, const bool required, const bool prohibited) {
		BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,required, prohibited);
		try{
			add(bc);
		}catch(...){
			_CLDELETE(bc);
			throw;
		}
  }
Query* MultiFieldQueryParser::getWildcardQuery(const TCHAR* field, TCHAR* termStr){
	if (field == NULL) {
		vector<BooleanClause*> clauses;
		for (int i = 0; fields[i]!=NULL; ++i) {
			Query* q = QueryParser::getWildcardQuery(fields[i], termStr);
			if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD));
		}
		return QueryParser::getBooleanQuery(clauses, true);
	}
	return QueryParser::getWildcardQuery(field, termStr);
}
Query* MultiFieldQueryParser::getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive){
	if (field == NULL) {
		vector<BooleanClause*> clauses;
		for (int i = 0; fields[i]!=NULL; ++i) {
			Query* q = QueryParser::getRangeQuery(fields[i], part1, part2, inclusive);
			if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD));
		}
		return QueryParser::getBooleanQuery(clauses, true);
	}else{
		return QueryParser::getRangeQuery(field, part1, part2, inclusive);
	}
}
Query* MultiFieldQueryParser::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){
	if (field == NULL) {
		vector<BooleanClause*> clauses;
		for (int i = 0; fields[i]!=NULL; ++i) {
			Query* q = QueryParser::GetRangeQuery(fields[i], part1, part2, inclusive);
			if ( q ){
				q = QueryAddedCallback(fields[i],q);
				if ( q ){
					clauses.push_back(_CLNEW BooleanClause(q,true,false,false));
				}
			}
		}
		return QueryParser::GetBooleanQuery(clauses);
	}else{
		Query* q = QueryParser::GetRangeQuery(field, part1, part2, inclusive);
		if ( q )
			q = QueryAddedCallback(field,q);
		return q;
	}
}
Query* MultiFieldQueryParser::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){
	if (field == NULL) {
		vector<BooleanClause*> clauses;
		for (int i = 0; fields[i]!=NULL; ++i) {
			Query* q = QueryParser::GetWildcardQuery(fields[i], termStr);
			if ( q ){
				q = QueryAddedCallback(fields[i],q);
				if ( q ){
					clauses.push_back(_CLNEW BooleanClause(q,true,false,false));
				}
			}
		}
		return QueryParser::GetBooleanQuery(clauses);
	}else{
		Query* q = QueryParser::GetWildcardQuery(field, termStr);
		if ( q )
			q = QueryAddedCallback(field,q);
		return q;
	}
}