I am trying to query my server using the .NET library NEST (GitHub - elastic/elasticsearch-net: Elasticsearch.Net & NEST)
I want my query to find any data where source = "abc"
and source_id in (" 123","145","158m")
I executed the following using using Postman and it worked
{
"query": {
"bool" : {
"must": {
"multi_match": {
"query": "abc",
"fields": [
"source"
]
}
},
"filter" : {
"terms" : {
"source_id" : ["123","145","158m"]
}
}
}
},
"fields": ["source_id"],
"_source": false
}
First, is there a better query (for performance) to get the same data?
Second, I can't find a way to apply the Filter
part into the query using the .net library.
Here is my c# code
var mySourceIds = new [] { "123","145","158m" }
var documents = await elasticClient.SearchAsync<MyRecord>(s =>
s.Query(q =>
q.Bool(b =>
b.Must(m =>
m.MultiMatch(mm =>
mm.Query("abc")
.Fields(new Field("source"))
)
).Filter(f => f.Terms(ft => ft.Field(ftf => mySourceIds.Contains(ftf.SourceId))))
)
).Fields(new Field("source_id"))
.Source(false)
);
However, the above code does not generate the filter
part in the query
"filter" : {
"terms" : {
"source_id" : ["123","145","158m"]
}
}
How can I set the terms in the filter using the .net library?