Compound queriesedit

Compound queries wrap other compound or leaf queries, either to combine their results and scores, to change their behaviour, or to switch from query to filter context.

The queries in this group are:

constant_score query
A query which wraps another query, but executes it in filter context. All matching documents are given the same “constant” _score.
bool query
The default query for combining multiple leaf or compound query clauses, as must, should, must_not, or filter clauses. The must and should clauses have their scores combined — the more matching clauses, the better — while the must_not and filter clauses are executed in filter context.
dis_max query
A query which accepts multiple queries, and returns any documents which match any of the query clauses. While the bool query combines the scores from all matching queries, the dis_max query uses the score of the single best- matching query clause.
function_score query
Modify the scores returned by the main query with functions to take into account factors like popularity, recency, distance, or custom algorithms implemented with scripting.
boosting query
Return documents which match a positive query, but reduce the score of documents which also match a negative query.
indices query
Execute one query for the specified indices, and another for other indices.

Constant Score Queryedit

See Constant Score Query

QueryBuilder qb = constantScoreQuery(
        termQuery("name","kimchy")      
    )
    .boost(2.0f);                       

your query

query score

Bool Queryedit

See Bool Query

QueryBuilder qb = boolQuery()
    .must(termQuery("content", "test1"))    
    .must(termQuery("content", "test4"))    
    .mustNot(termQuery("content", "test2")) 
    .should(termQuery("content", "test3"))  
    .filter(termQuery("content", "test5")); 

must query

must not query

should query

a query that must appear in the matching documents but doesn’t contribute to scoring.

Dis Max Queryedit

See Dis Max Query

QueryBuilder qb = disMaxQuery()
    .add(termQuery("name", "kimchy"))        
    .add(termQuery("name", "elasticsearch")) 
    .boost(1.2f)                             
    .tieBreaker(0.7f);                       

add your queries

add your queries

boost factor

tie breaker

Function Score Queryedit

See Function Score Query.

To use ScoreFunctionBuilders just import them in your class:

import static org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders.*;
FilterFunctionBuilder[] functions = {
        new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                matchQuery("name", "kimchy"),                 
                randomFunction("ABCDEF")),                    
        new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                exponentialDecayFunction("age", 0L, 1L))      
};
QueryBuilder qb = QueryBuilders.functionScoreQuery(functions);

Add a first function based on a query

And randomize the score based on a given seed

Add another function based on the age field

Boosting Queryedit

See Boosting Query

QueryBuilder qb = boostingQuery(
        termQuery("name","kimchy"),    
        termQuery("name","dadoonet"))  
    .negativeBoost(0.2f);              

query that will promote documents

query that will demote documents

negative boost

Indices Queryedit

Deprecated in 5.0.0.

Search on the _index field instead

See Indices Query

// Using another query when no match for the main one
QueryBuilder qb = indicesQuery(
        termQuery("tag", "wow"),             
        "index1", "index2"                   
    ).noMatchQuery(termQuery("tag", "kow")); 

query to be executed on selected indices

selected indices

query to be executed on non matching indices

// Using all (match all) or none (match no documents)
QueryBuilder qb = indicesQuery(
        termQuery("tag", "wow"),            
        "index1", "index2"                  
    ).noMatchQuery("all");                  

query to be executed on selected indices

selected indices

none (to match no documents), and all (to match all documents). Defaults to all.