complete bool query
This commit is contained in:
parent
96b193cbdb
commit
d0f422521a
@ -21,6 +21,10 @@
|
||||
#include "db_manager.h"
|
||||
#include "utf8_str.h"
|
||||
#include "query/bool_query_parser.h"
|
||||
#include "query/geo_distance_parser.h"
|
||||
#include "query/range_query_parser.h"
|
||||
#include "query/match_query_parser.h"
|
||||
#include "query/term_query_parser.h"
|
||||
#include <sstream>
|
||||
using namespace std;
|
||||
|
||||
@ -218,6 +222,14 @@ void Component::GetQueryWord(uint32_t &m_has_gis){
|
||||
if(m_query.isObject()){
|
||||
if(m_query.isMember("bool")){
|
||||
query_parser = new BoolQueryParser(m_appid, m_query["bool"]);
|
||||
} else if(m_query.isMember("geo_distance")){
|
||||
query_parser = new GeoDistanceParser(m_appid, m_query["geo_distance"]);
|
||||
} else if(m_query.isMember("range")){
|
||||
query_parser = new RangeQueryParser(m_appid, m_query["range"]);
|
||||
} else if(m_query.isMember("match")){
|
||||
query_parser = new MatchQueryParser(m_appid, m_query["match"]);
|
||||
} else if(m_query.isMember("term")){
|
||||
query_parser = new TermQueryParser(m_appid, m_query["term"]);
|
||||
}
|
||||
query_parser_res = new QueryParserRes();
|
||||
query_parser->ParseContent(query_parser_res);
|
||||
@ -234,6 +246,7 @@ void Component::GetQueryWord(uint32_t &m_has_gis){
|
||||
latitude = query_parser_res->Latitude();
|
||||
longitude = query_parser_res->Longitude();
|
||||
distance = query_parser_res->Distance();
|
||||
log_debug("lat: %s, lon: %s, distance: %f", latitude.c_str(), longitude.c_str(), distance);
|
||||
}
|
||||
extra_filter_keys.assign(query_parser_res->ExtraFilterKeys().begin(), query_parser_res->ExtraFilterKeys().end());
|
||||
extra_filter_and_keys.assign(query_parser_res->ExtraFilterAndKeys().begin(), query_parser_res->ExtraFilterAndKeys().end());
|
||||
|
@ -4,13 +4,15 @@
|
||||
#include "range_query_parser.h"
|
||||
#include "term_query_parser.h"
|
||||
#include "match_query_parser.h"
|
||||
#include "geo_distance_parser.h"
|
||||
|
||||
const char* const BoolQueryParser::NAME ="bool";
|
||||
const char* const BoolQueryParser::MUST ="must";
|
||||
const char* const BoolQueryParser::SHOULD ="should";
|
||||
const char* const BoolQueryParser::TERM ="term";
|
||||
const char* const BoolQueryParser::MATCH ="match";
|
||||
const char* const BoolQueryParser::RANGE ="range";
|
||||
const char* const NAME ="bool";
|
||||
const char* const MUST ="must";
|
||||
const char* const SHOULD ="should";
|
||||
const char* const TERM ="term";
|
||||
const char* const MATCH ="match";
|
||||
const char* const RANGE ="range";
|
||||
const char* const GEODISTANCE ="geo_distance";
|
||||
|
||||
BoolQueryParser::BoolQueryParser(uint32_t a, Json::Value& v)
|
||||
:appid(a),value(v)
|
||||
@ -28,6 +30,9 @@ BoolQueryParser::~BoolQueryParser(){
|
||||
if(NULL != match_query_parser){
|
||||
delete match_query_parser;
|
||||
}
|
||||
if(NULL != geo_query_parser){
|
||||
delete geo_query_parser;
|
||||
}
|
||||
}
|
||||
|
||||
void BoolQueryParser::DoJobByType(Json::Value& value, uint32_t type, QueryParserRes* query_parser_res){
|
||||
@ -40,6 +45,9 @@ void BoolQueryParser::DoJobByType(Json::Value& value, uint32_t type, QueryParser
|
||||
} else if(value.isMember(RANGE)){
|
||||
range_query_parser = new RangeQueryParser(appid, value[RANGE]);
|
||||
range_query_parser->ParseContent(query_parser_res, type);
|
||||
} else if(value.isMember(GEODISTANCE)){
|
||||
geo_query_parser = new GeoDistanceParser(appid, value[GEODISTANCE]);
|
||||
geo_query_parser->ParseContent(query_parser_res);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
class RangeQueryParser;
|
||||
class TermQueryParser;
|
||||
class MatchQueryParser;
|
||||
class GeoDistanceParser;
|
||||
class BoolQueryParser : public QueryParser
|
||||
{
|
||||
public:
|
||||
@ -38,15 +39,10 @@ private:
|
||||
private:
|
||||
uint32_t appid;
|
||||
Json::Value value;
|
||||
static const char* const NAME;
|
||||
static const char* const MUST;
|
||||
static const char* const SHOULD;
|
||||
static const char* const TERM;
|
||||
static const char* const MATCH;
|
||||
static const char* const RANGE;
|
||||
RangeQueryParser* range_query_parser;
|
||||
TermQueryParser* term_query_parser;
|
||||
MatchQueryParser* match_query_parser;
|
||||
GeoDistanceParser* geo_query_parser;
|
||||
};
|
||||
|
||||
#endif
|
@ -102,8 +102,8 @@ void GeoDistanceParser::ParseContent(QueryParserRes* query_parser_res){
|
||||
stringstream sslat;
|
||||
stringstream sslon;
|
||||
sslat << geo.lat;
|
||||
sslon << geo.lon;
|
||||
query_parser_res->Latitude() = sslat.str();
|
||||
sslon << geo.lon;
|
||||
query_parser_res->Longitude() = sslon.str();
|
||||
query_parser_res->Distance() = distance;
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ public:
|
||||
return latitude;
|
||||
}
|
||||
string& Longitude(){
|
||||
return latitude;
|
||||
return longitude;
|
||||
}
|
||||
double& Distance(){
|
||||
return distance;
|
||||
|
@ -53,9 +53,10 @@ void RangeQueryParser::ParseContent(QueryParserRes* query_parser_res, uint32_t t
|
||||
info.range_type = RANGE_GTLT;
|
||||
}
|
||||
}
|
||||
info.start = start.asInt();
|
||||
info.end = end.asInt();
|
||||
fieldInfos.push_back(info);
|
||||
fieldInfo.start = start.asInt();
|
||||
fieldInfo.end = end.asInt();
|
||||
fieldInfo.range_type = info.range_type;
|
||||
fieldInfos.push_back(fieldInfo);
|
||||
}
|
||||
if(fieldInfos.size() != 0){
|
||||
if(type == ORKEY){
|
||||
|
Loading…
Reference in New Issue
Block a user