I would like to do a ElasticSearch query like this:
{
\"query\" :
{
\"bool\" :
{
\"filter\" : [
{
You can create a list of filters before you make a query if you want to check conditional filters as shown below:
var nameList = new[] {"a", "b"};
var colorList = new[] {1, 2};
var filters = new List, QueryContainer>>();
if (nameList.Any())
{
filters.Add(fq=> fq.Terms(t => t.Field(f => f.Name).Terms(nameList)));
}
if (colorList.Any())
{
filters.Add(fq => fq.Terms(t => t.Field(f => f.Color).Terms(colorList)));
}
ISearchResponse searchResponse =
elasticClient.Search(x => x.Query(q => q
.Bool(bq => bq.Filter(filters))));
If you don't need to check any condition before making filter query then you can have something like that:
ISearchResponse searchResponse =
elasticClient.Search(x => x.Query(q => q
.Bool(bq => bq
.Filter(
fq => fq.Terms(t => t.Field(f => f.Name).Terms(nameList)),
fq => fq.Terms(t => t.Field(f => f.Color).Terms(colorList))
))));