IMPORTANT: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
current release documentation.
Function Score Query Usage
edit
IMPORTANT: This documentation is no longer updated. Refer to Elastic's version policy and the latest documentation.
Function Score Query Usage
editFluent DSL example
editq
.FunctionScore(c => c
.Name("named_query")
.Boost(1.1)
.Query(qq => qq.MatchAll())
.BoostMode(FunctionBoostMode.Multiply)
.ScoreMode(FunctionScoreMode.Sum)
.MaxBoost(20.0)
.MinScore(1.0)
.Functions(f => f
.Exponential(b => b
.Field(p => p.NumberOfCommits)
.Decay(0.5)
.Origin(1.0)
.Scale(0.1)
.Weight(2.1)
.Filter(fi => fi
.Range(r => r
.Field(p => p.NumberOfContributors)
.GreaterThan(10)
)
)
)
.GaussDate(b => b.Field(p => p.LastActivity).Origin(DateMath.Now).Decay(0.5).Scale("1d"))
.LinearGeoLocation(b => b
.Field(p => p.LocationPoint)
.Origin(new GeoLocation(70, -70))
.Scale(Distance.Miles(1))
.MultiValueMode(MultiValueMode.Average)
)
.FieldValueFactor(b => b
.Field(p => p.NumberOfContributors)
.Factor(1.1)
.Missing(0.1)
.Modifier(FieldValueFactorModifier.Square)
.Weight(3)
.Filter(fi => fi
.Term(t => t
.Field(p => p.Branches)
.Value("dev")
)
)
)
.RandomScore(r => r.Seed(1337).Field("_seq_no"))
.RandomScore(r => r.Seed("randomstring").Field("_seq_no"))
.Weight(1.0)
.ScriptScore(s => s
.Script(ss => ss
.Source("Math.log(2 + doc['numberOfCommits'].value)")
)
.Weight(2)
)
)
)
Object Initializer syntax example
editnew FunctionScoreQuery()
{
Name = "named_query",
Boost = 1.1,
Query = new MatchAllQuery(),
BoostMode = FunctionBoostMode.Multiply,
ScoreMode = FunctionScoreMode.Sum,
MaxBoost = 20.0,
MinScore = 1.0,
Functions = new List<IScoreFunction>
{
new ExponentialDecayFunction
{
Origin = 1.0,
Decay = 0.5,
Field = Field<Project>(p => p.NumberOfCommits),
Scale = 0.1,
Weight = 2.1,
Filter = new NumericRangeQuery
{
Field = Field<Project>(f => f.NumberOfContributors),
GreaterThan = 10
}
},
new GaussDateDecayFunction
{ Origin = DateMath.Now, Field = Field<Project>(p => p.LastActivity), Decay = 0.5, Scale = TimeSpan.FromDays(1) },
new LinearGeoDecayFunction
{
Origin = new GeoLocation(70, -70), Field = Field<Project>(p => p.LocationPoint), Scale = Distance.Miles(1),
MultiValueMode = MultiValueMode.Average
},
new FieldValueFactorFunction
{
Field = Field<Project>(p => p.NumberOfContributors),
Factor = 1.1,
Missing = 0.1,
Modifier = FieldValueFactorModifier.Square,
Weight = 3,
Filter = new TermQuery
{
Field = Field<Project>(p => p.Branches),
Value = "dev"
}
},
new RandomScoreFunction { Seed = 1337, Field = "_seq_no" },
new RandomScoreFunction { Seed = "randomstring", Field = "_seq_no" },
new WeightFunction { Weight = 1.0 },
new ScriptScoreFunction { Script = new InlineScript("Math.log(2 + doc['numberOfCommits'].value)"), Weight = 2.0 }
}
}
Example json output.
{
"function_score": {
"_name": "named_query",
"boost": 1.1,
"boost_mode": "multiply",
"functions": [
{
"exp": {
"numberOfCommits": {
"origin": 1.0,
"scale": 0.1,
"decay": 0.5
}
},
"weight": 2.1,
"filter": {
"range": {
"numberOfContributors": {
"gt": 10.0
}
}
}
},
{
"gauss": {
"lastActivity": {
"origin": "now",
"scale": "1d",
"decay": 0.5
}
}
},
{
"linear": {
"locationPoint": {
"origin": {
"lat": 70.0,
"lon": -70.0
},
"scale": "1mi"
},
"multi_value_mode": "avg"
}
},
{
"filter": {
"term": {
"branches": {
"value": "dev"
}
}
},
"field_value_factor": {
"field": "numberOfContributors",
"factor": 1.1,
"missing": 0.1,
"modifier": "square"
},
"weight": 3.0
},
{
"random_score": {
"seed": 1337,
"field": "_seq_no"
}
},
{
"random_score": {
"seed": "randomstring",
"field": "_seq_no"
}
},
{
"weight": 1.0
},
{
"script_score": {
"script": {
"source": "Math.log(2 + doc['numberOfCommits'].value)"
}
},
"weight": 2.0
}
],
"max_boost": 20.0,
"min_score": 1.0,
"query": {
"match_all": {}
},
"score_mode": "sum"
}
}