65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
|
// 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
|
||
|
}
|