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.
64 lines
1.4 KiB
64 lines
1.4 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 |
|
|
|
type Rescorer interface { |
|
Name() string |
|
Source() (interface{}, error) |
|
} |
|
|
|
// -- Query Rescorer -- |
|
|
|
type QueryRescorer struct { |
|
query Query |
|
rescoreQueryWeight *float64 |
|
queryWeight *float64 |
|
scoreMode string |
|
} |
|
|
|
func NewQueryRescorer(query Query) *QueryRescorer { |
|
return &QueryRescorer{ |
|
query: query, |
|
} |
|
} |
|
|
|
func (r *QueryRescorer) Name() string { |
|
return "query" |
|
} |
|
|
|
func (r *QueryRescorer) RescoreQueryWeight(rescoreQueryWeight float64) *QueryRescorer { |
|
r.rescoreQueryWeight = &rescoreQueryWeight |
|
return r |
|
} |
|
|
|
func (r *QueryRescorer) QueryWeight(queryWeight float64) *QueryRescorer { |
|
r.queryWeight = &queryWeight |
|
return r |
|
} |
|
|
|
func (r *QueryRescorer) ScoreMode(scoreMode string) *QueryRescorer { |
|
r.scoreMode = scoreMode |
|
return r |
|
} |
|
|
|
func (r *QueryRescorer) Source() (interface{}, error) { |
|
rescoreQuery, err := r.query.Source() |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
source := make(map[string]interface{}) |
|
source["rescore_query"] = rescoreQuery |
|
if r.queryWeight != nil { |
|
source["query_weight"] = *r.queryWeight |
|
} |
|
if r.rescoreQueryWeight != nil { |
|
source["rescore_query_weight"] = *r.rescoreQueryWeight |
|
} |
|
if r.scoreMode != "" { |
|
source["score_mode"] = r.scoreMode |
|
} |
|
return source, nil |
|
}
|
|
|