Table of Contents

Boolean queries

BooleanQuery combines clauses with Occur:

Occur Description
Must Required
Should Optional; increases relevance
MustNot Exclude

Builder

var query = new BooleanQuery.Builder()
    .Add(new TermQuery("title", "fox"),  Occur.Must)
    .Add(new TermQuery("title", "quick"), Occur.Should)
    .Add(new TermQuery("title", "lazy"),  Occur.MustNot)
    .Build();

Fluent builder

var query = new BooleanQueryBuilder()
    .Must(new TermQuery("title", "fox"))
    .Should(new TermQuery("title", "quick"))
    .MustNot(new TermQuery("title", "lazy"))
    .Build();

Pure filter mode

A BooleanQuery with only MustNot clauses matches everything that passes the exclusions. Wrap in ConstantScoreQuery to skip BM25:

var filter = new ConstantScoreQuery(
    new BooleanQuery.Builder()
        .Add(new TermQuery("status", "draft"), Occur.MustNot)
        .Build(),
    score: 0f);

See also