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; } }
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; } }