def __init__(self, **kwargs): super(SolrGroupSearchQuery, self).__init__(**kwargs) self.group = True self.gquery_filter = SearchNode() self.group_format = "simple" self.group_ngroups = True self.group_queries = set()
def add_group_query(self, query_filter, use_or=False, is_master=True, tag=None): """ Adds a group query to the current query. """ if use_or: connector = SQ.OR else: connector = SQ.AND if self.gquery_filter and query_filter.connector != SQ.AND and len( query_filter) > 1: self.gquery_filter.start_subtree(connector) subtree = True else: subtree = False for child in query_filter.children: if isinstance(child, tree.Node): self.gquery_filter.start_subtree(connector) self.add_group_query(child, is_master=False) self.gquery_filter.end_subtree() else: expression, value = child self.gquery_filter.add((expression, value), connector) connector = query_filter.connector if query_filter.negated: self.gquery_filter.negate() if subtree: self.gquery_filter.end_subtree() if is_master: # If and only if we have iterated through all the children of the # query_filter, the SQ object, append the query fragment to the # set of group queries, and reset self.gquery_filter back to an # empty SearchNode. qfrag = self.gquery_filter.as_query_string( self.build_query_fragment) # If specified, add a local param to identify individual group # query statements. if tag: qfrag = '{!tag="%s"} ' % str(tag) + qfrag if qfrag: self.group_queries.add(qfrag) self.gquery_filter = SearchNode()