see on GitHub

Session : Querying : How to Use Intersect

To return only documents that match all provided sub-queries, use the Intersect extension which enables RavenDB to perform server-side intersection queries.

Syntax

IRavenQueryable<T> Intersect<T>();

Example

// return all T-shirts that are manufactured by 'Raven'
// and contain both 'Small Blue' and 'Large Gray' types
List<TShirt> tshirts = session
    .Query<TShirt, TShirts_ByManufacturerColorSizeAndReleaseYear>()
    .Where(x => x.Manufacturer == "Raven")
    .Intersect()
    .Where(x => x.Types.Any(t => t.Color == "Blue" && t.Size == "Small"))
    .Intersect()
    .Where(x => x.Types.Any(t => t.Color == "Gray" && t.Size == "Large"))
    .ToList();
// return all T-shirts that are manufactured by 'Raven'
// and contain both 'Small Blue' and 'Large Gray' types
List<TShirt> tshirts = await asyncSession
    .Query<TShirt, TShirts_ByManufacturerColorSizeAndReleaseYear>()
    .Where(x => x.Manufacturer == "Raven")
    .Intersect()
    .Where(x => x.Types.Any(t => t.Color == "Blue" && t.Size == "Small"))
    .Intersect()
    .Where(x => x.Types.Any(t => t.Color == "Gray" && t.Size == "Large"))
    .ToListAsync();
from index 'TShirts/ByManufacturerColorSizeAndReleaseYear' 
where intersect(Manufacturer = 'Raven', Color = 'Blue' and Size = 'Small', Color = 'Gray' and Size = 'Large')