public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { CustomScoreQuery term = (CustomScoreQuery)value; if (term != null) { writer.WriteStartObject(); writer.WritePropertyName("custom_score"); writer.WriteStartObject(); writer.WritePropertyName("query"); serializer.Serialize(writer, term.Query); writer.WritePropertyName("script"); writer.WriteValue(term.Script); if (term.Params != null && term.Params.Count > 0) { writer.WritePropertyName("params"); writer.WriteStartObject(); foreach (var filter in term.Params) { writer.WritePropertyName(filter.Key); writer.WriteValue(filter.Value); } writer.WriteEndObject(); } writer.WriteEndObject(); writer.WriteEndObject(); } }
public void TestCustomScoreQuery() { //age 23 24 25 var query = new TermQuery("type", "common"); var dict = new Dictionary<string, object>(); dict["param1"] = 0.2; var script = "_score + doc['age'].value - param1"; var q = new CustomScoreQuery(query, script, dict); var result = client.Search(index, "type", q, 0, 5); foreach (var o in result.GetHits().Hits) { Console.WriteLine(o.ToString()); } Assert.AreEqual("张",result.GetHits().Hits[0].Source["name"]); }