Compound queries

edit

Compound queries

edit

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.

Constant Score Query

edit

See Constant Score Query

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

your query

query score

Bool Query

edit

See Bool Query

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 Query

edit

See Dis Max Query

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 Query

edit

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()),                           
        new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                exponentialDecayFunction("age", 0L, 1L))     
};
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 Query

edit

See Boosting Query

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

query that will promote documents

query that will demote documents

negative boost