internal static ISolrQuery GetMultipleCriteriaQuery(ISolrQuery left, ISolrQuery right, string criteriaOperator)
        {
            left = left.TrySimplify();
            right = right.TrySimplify();
            if (left == right)
            {
                return left;
            }

            if (left == SolrQuery.All)
            {
                return right;
            }

            if (right == SolrQuery.All)
            {
                return left;
            }            

            SolrMultipleCriteriaQuery leftAnd = left as SolrMultipleCriteriaQuery;
            SolrMultipleCriteriaQuery rightAnd = right as SolrMultipleCriteriaQuery;

            List<ISolrQuery> queries = new List<ISolrQuery>();

            if (leftAnd != null && leftAnd.Oper == criteriaOperator)
            {
                queries.AddRange(leftAnd.Queries);
            }
            else
            {
                queries.Add(left);
            }

            if (rightAnd != null && rightAnd.Oper == criteriaOperator)
            {
                queries.AddRange(rightAnd.Queries);
            }
            else
            {
                queries.Add(right);
            }

            return new SolrMultipleCriteriaQuery(queries, criteriaOperator).TrySimplify();
        }