I have this query which want to convert to C# nest query which have term filter and script clause for updating the query the query is working perfectly in Kibana Dev Tools but could not convert in nest C# object initializer syntax.
POST acquiringdata/_update_by_query
{
"script": {
"inline": "ctx._source.Address = 'FORTRESS STADIUM GROUND FLOOR OPPOSITE_TestasadasD2'",
"lang": "painless"
},
"query": {
"bool": {
"must": [
{
"term": {
"PaymentTransactionID": {
"value": "58804121"
}
}
}
]
}
}
}
So far came for conclusion to this code
var filterClause = new List<QueryContainer>();
// var ScriptClause = new List<ScriptQueryContainer>();
filterClause.Add(new TermQuery
{
Field = new Field("PaymentTransactionID"),
Value = transaction.PaymentTransactionID,
});
string _templateString = "ctx._source.Address = 'FORTRESS STADIUM GROUND FLOOR OPPOSITE_TestasadasD2'";
// ScriptClause.Add(new ScriptQuery{
// Name = "named_query",
// Boost = 1.1,
// Script = new InlineScript(_templateString)
// {
// Params = new Dictionary<string, object> {
// { "ctx._source.Address", "123" }
// }
// }
//});
var SearchRequest = new SearchRequest<NewIndexClass>(NewTestingIndex)
{
Size = 1000,
Query = new BoolQuery
{
Must = filterClause,
}
};
var searchResponse = _elasticClient.Search<NewIndexClass>(SearchRequest);
if (searchResponse.ApiCall.ResponseBodyInBytes != null)
{
var requestJson = System.Text.Encoding.UTF8.GetString(searchResponse.ApiCall.RequestBodyInBytes);
var JsonFormatQuery = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(requestJson), Formatting.Indented);
}
I can achieve this output without script query.
GET _search
{
"query": {
"bool": {
"must": [
{
"term": {
"PaymentTransactionID": {
"value": "58804121"
}
}
}
]
}
},
"size": 1000
}
Any help would be appreciated to convert this into script query.
I have Done it through this
transaction.Address = "'" + transaction.Address + "'";
var scriptParams = new Dictionary<string, object>
{
{ nameof(NewIndexClass.Address),transaction.Address}
};
var script = $"ctx._source.Address=" + transaction.Address;
var searchResponse = _elasticClient.UpdateByQuery<NewIndexClass>(qd =>
qd.Index(NewTestingIndex)
.Conflicts(Conflicts.Proceed)
.Query(rq => rq.Term("PaymentTransactionID", transaction.PaymentTransactionID))
.Script(s => s
.Source(script)
.Params(scriptParams)
)
);
if (searchResponse.ApiCall.ResponseBodyInBytes != null)
{
var requestJson = System.Text.Encoding.UTF8.GetString(searchResponse.ApiCall.RequestBodyInBytes);
var JsonFormatQuery = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(requestJson), Formatting.Indented);
}