1// Copyright 2012-2015 Oliver Eilhard. All rights reserved. 2// Use of this source code is governed by a MIT-license. 3// See http://olivere.mit-license.org/license.txt for details. 4 5package elastic 6 7type Rescorer interface { 8 Name() string 9 Source() (interface{}, error) 10} 11 12// -- Query Rescorer -- 13 14type QueryRescorer struct { 15 query Query 16 rescoreQueryWeight *float64 17 queryWeight *float64 18 scoreMode string 19} 20 21func NewQueryRescorer(query Query) *QueryRescorer { 22 return &QueryRescorer{ 23 query: query, 24 } 25} 26 27func (r *QueryRescorer) Name() string { 28 return "query" 29} 30 31func (r *QueryRescorer) RescoreQueryWeight(rescoreQueryWeight float64) *QueryRescorer { 32 r.rescoreQueryWeight = &rescoreQueryWeight 33 return r 34} 35 36func (r *QueryRescorer) QueryWeight(queryWeight float64) *QueryRescorer { 37 r.queryWeight = &queryWeight 38 return r 39} 40 41func (r *QueryRescorer) ScoreMode(scoreMode string) *QueryRescorer { 42 r.scoreMode = scoreMode 43 return r 44} 45 46func (r *QueryRescorer) Source() (interface{}, error) { 47 rescoreQuery, err := r.query.Source() 48 if err != nil { 49 return nil, err 50 } 51 52 source := make(map[string]interface{}) 53 source["rescore_query"] = rescoreQuery 54 if r.queryWeight != nil { 55 source["query_weight"] = *r.queryWeight 56 } 57 if r.rescoreQueryWeight != nil { 58 source["rescore_query_weight"] = *r.rescoreQueryWeight 59 } 60 if r.scoreMode != "" { 61 source["score_mode"] = r.scoreMode 62 } 63 return source, nil 64} 65