internal static FilterContainer MergeMustFilters(this IFilterContainer leftContainer, IFilterContainer rightContainer)
        {
            if (!leftContainer.CanMergeMustAndMustNots() || !rightContainer.CanMergeMustAndMustNots())
            {
                if (rightContainer.IsBoolFilterWithOnlyMustNots())
                {
                    return(CreateMustContainer(new [] { leftContainer }, rightContainer.Bool.MustNot));
                }
                if (leftContainer.IsBoolFilterWithOnlyMustNots())
                {
                    return(CreateMustContainer(new [] { rightContainer }, leftContainer.Bool.MustNot));
                }
                return(CreateMustContainer(new [] { leftContainer, rightContainer }, null));
            }

            var mustNots = OrphanMustNots(leftContainer)
                           .EagerConcat(OrphanMustNots(rightContainer));

            var leftClauses  = CreateMustClauses(leftContainer);
            var rightClauses = CreateMustClauses(rightContainer);

            var mustClauses = leftClauses.EagerConcat(rightClauses);
            var container   = CreateMustContainer(mustClauses, mustNots);

            return(container);
        }
		internal static FilterContainer MergeMustFilters(this IFilterContainer leftContainer, IFilterContainer rightContainer)
		{
			if (!leftContainer.CanMergeMustAndMustNots() || !rightContainer.CanMergeMustAndMustNots())
			{
				if (rightContainer.IsBoolFilterWithOnlyMustNots()) 
					return CreateMustContainer(new [] { leftContainer }, rightContainer.Bool.MustNot );
				if (leftContainer.IsBoolFilterWithOnlyMustNots()) 
					return CreateMustContainer(new [] { rightContainer }, leftContainer.Bool.MustNot );
				return CreateMustContainer(new [] { leftContainer, rightContainer }, null);
			}
			
			var mustNots = OrphanMustNots(leftContainer)
				.EagerConcat(OrphanMustNots(rightContainer));
			
			var leftClauses = CreateMustClauses(leftContainer);
			var rightClauses = CreateMustClauses(rightContainer);
			
			var mustClauses = leftClauses.EagerConcat(rightClauses);
			var container = CreateMustContainer(mustClauses, mustNots);
			return container;
		}