You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.2 KiB
97 lines
2.2 KiB
// Copyright 2012-present Oliver Eilhard. All rights reserved. |
|
// Use of this source code is governed by a MIT-license. |
|
// See http://olivere.mit-license.org/license.txt for details. |
|
|
|
package elastic |
|
|
|
// A boosting query can be used to effectively |
|
// demote results that match a given query. |
|
// For more details, see: |
|
// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-boosting-query.html |
|
type BoostingQuery struct { |
|
Query |
|
positiveClause Query |
|
negativeClause Query |
|
negativeBoost *float64 |
|
boost *float64 |
|
} |
|
|
|
// Creates a new boosting query. |
|
func NewBoostingQuery() *BoostingQuery { |
|
return &BoostingQuery{} |
|
} |
|
|
|
func (q *BoostingQuery) Positive(positive Query) *BoostingQuery { |
|
q.positiveClause = positive |
|
return q |
|
} |
|
|
|
func (q *BoostingQuery) Negative(negative Query) *BoostingQuery { |
|
q.negativeClause = negative |
|
return q |
|
} |
|
|
|
func (q *BoostingQuery) NegativeBoost(negativeBoost float64) *BoostingQuery { |
|
q.negativeBoost = &negativeBoost |
|
return q |
|
} |
|
|
|
func (q *BoostingQuery) Boost(boost float64) *BoostingQuery { |
|
q.boost = &boost |
|
return q |
|
} |
|
|
|
// Creates the query source for the boosting query. |
|
func (q *BoostingQuery) Source() (interface{}, error) { |
|
// { |
|
// "boosting" : { |
|
// "positive" : { |
|
// "term" : { |
|
// "field1" : "value1" |
|
// } |
|
// }, |
|
// "negative" : { |
|
// "term" : { |
|
// "field2" : "value2" |
|
// } |
|
// }, |
|
// "negative_boost" : 0.2 |
|
// } |
|
// } |
|
|
|
query := make(map[string]interface{}) |
|
|
|
boostingClause := make(map[string]interface{}) |
|
query["boosting"] = boostingClause |
|
|
|
// Negative and positive clause as well as negative boost |
|
// are mandatory in the Java client. |
|
|
|
// positive |
|
if q.positiveClause != nil { |
|
src, err := q.positiveClause.Source() |
|
if err != nil { |
|
return nil, err |
|
} |
|
boostingClause["positive"] = src |
|
} |
|
|
|
// negative |
|
if q.negativeClause != nil { |
|
src, err := q.negativeClause.Source() |
|
if err != nil { |
|
return nil, err |
|
} |
|
boostingClause["negative"] = src |
|
} |
|
|
|
if q.negativeBoost != nil { |
|
boostingClause["negative_boost"] = *q.negativeBoost |
|
} |
|
|
|
if q.boost != nil { |
|
boostingClause["boost"] = *q.boost |
|
} |
|
|
|
return query, nil |
|
}
|
|
|