Skip to content

QueryBuilder API Reference

The QueryBuilder class provides static factory methods for creating all query types.

Import

import com.livetheoogway.forage.models.query.util.QueryBuilder;

Match Query

Creates a term match query.

QueryBuilder.matchQuery(String field, String value)
Parameter Type Description
field String Field name to search
value String Term to match

Returns: MatchQueryBuilder

Methods on MatchQueryBuilder:

Method Description
.boost(float) Set relevance boost
.build() Build as sub-query
.buildForageQuery() Build as complete query
.buildForageQuery(int size) Build with result limit
.buildForageQuery(int size, List<SortCriteria> sort) Build with sorting
.buildForageQuery(int size, List<SortCriteria> sort, Float minScore) Build with all options

Example:

QueryBuilder.matchQuery("title", "java")
    .boost(2.0f)
    .buildForageQuery(10)

Boolean Query

Creates a boolean query combining multiple sub-queries.

QueryBuilder.booleanQuery()

Returns: BooleanQueryBuilder

Methods on BooleanQueryBuilder:

Method Description
.query(Query) Add a sub-query
.clauseType(ClauseType) Set clause type (MUST, SHOULD, MUST_NOT, FILTER)
.boost(float) Set relevance boost
.build() Build as sub-query
.buildForageQuery(...) Build as complete query

Example:

QueryBuilder.booleanQuery()
    .query(QueryBuilder.matchQuery("title", "java").build())
    .query(QueryBuilder.matchQuery("author", "bloch").build())
    .clauseType(ClauseType.MUST)
    .buildForageQuery(10)

Range Queries

Integer Range

QueryBuilder.intRangeQuery(String field, int low, int high)

Float Range

QueryBuilder.floatRangeQuery(String field, float low, float high)
Parameter Type Description
field String Numeric field name
low int/float Lower bound (inclusive)
high int/float Upper bound (inclusive)

Example:

QueryBuilder.intRangeQuery("pages", 100, 500).buildForageQuery()
QueryBuilder.floatRangeQuery("rating", 4.0f, 5.0f).buildForageQuery()

Fuzzy Query

Creates a fuzzy match query with typo tolerance.

QueryBuilder.fuzzyMatchQuery(String field, String value)

Example:

QueryBuilder.fuzzyMatchQuery("title", "progamming").buildForageQuery()

Phrase Query

Creates an exact phrase match query.

QueryBuilder.phraseMatchQuery(String field, String phrase)

Example:

QueryBuilder.phraseMatchQuery("title", "clean code").buildForageQuery()

Prefix Query

Creates a prefix match query for autocomplete.

QueryBuilder.prefixMatchQuery(String field, String prefix)

Example:

QueryBuilder.prefixMatchQuery("author", "mart").buildForageQuery()

Match All Query

Returns all documents.

QueryBuilder.matchAllQuery()

Example:

QueryBuilder.matchAllQuery().buildForageQuery(100)

Function Score Query

Creates a query with custom scoring functions.

QueryBuilder.functionScoreQuery()

Returns: FunctionScoreQueryBuilder

Methods on FunctionScoreQueryBuilder:

Method Description
.baseQuery(Query) Set the base query
.scoreFunction(ScoreFunction) Set custom score function
.constantScore(float) Use constant score
.fieldValueFactor(String field) Score by field value
.fieldValueFactor(String field, float factor) Score by field value × factor
.boost(float) Final score multiplier
.build() Build as sub-query
.buildForageQuery(...) Build as complete query

Example:

QueryBuilder.functionScoreQuery()
    .baseQuery(QueryBuilder.matchQuery("title", "java").build())
    .fieldValueFactor("rating", 1.2f)
    .boost(1.1f)
    .buildForageQuery(20)

ClauseType Enum

public enum ClauseType {
    MUST,      // AND - all must match
    SHOULD,    // OR - at least one must match
    MUST_NOT,  // NOT - must not match
    FILTER     // Must match, no scoring
}

SortCriteria

// Sort by score
SortCriteria.byScore(SortOrder order)

// Sort by field
new SortCriteria(String field, SortOrder order)

SortOrder Enum

public enum SortOrder {
    ASC,   // Ascending (low to high)
    DESC   // Descending (high to low)
}

Complete Example

ForageQuery query = QueryBuilder.booleanQuery()
    .query(QueryBuilder.matchQuery("title", "programming").boost(3.0f).build())
    .query(QueryBuilder.matchQuery("author", "martin").boost(2.0f).build())
    .query(QueryBuilder.floatRangeQuery("rating", 4.0f, 5.0f)
        .clauseType(ClauseType.FILTER).build())
    .clauseType(ClauseType.SHOULD)
    .buildForageQuery(
        20,
        Arrays.asList(SortCriteria.byScore(SortOrder.DESC)),
        0.5f
    );

ForageQueryResult<Book> results = engine.search(query);