示例#1
0
 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()
示例#2
0
    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()