How to iterate fields as per coming input fields in NEST queries?

Viewed 38

I written my NEST query like below

var searchResponse = await _elasticClient.SearchAsync<T>(s => s
                                   .Index(indexName)
                                   .Query(q => q
                                     .Bool(b => b
                                        .Should(
                                         sh => sh.Prefix(pr => pr.Field(fieldNames[0]).Value(fieldValues[0])),
                                         sh => sh.Prefix(pr => pr.Field(fieldNames[1]).Value(fieldValues[1]))
                                         )
                                     ))
                                   .Aggregations(ag=>ag.Cardinality(sumName,ca=>ca.Field(cardinalField)))
                                   .Collapse(co=>co.Field(cardinalField))
                                  ).ConfigureAwait(false);

            return searchResponse.Count;
        }

I need to iterate below code

sh => sh.Prefix(pr => pr.Field(fieldNames[0]).Value(fieldValues[0])),
                                             sh => sh.Prefix(pr => pr.Field(fieldNames[1]).Value(fieldValues[1]))

as per input array

I tried like below

private static QueryContainer MatchAny<T>(QueryContainerDescriptor<T> descriptor, Field[] fields, string value) where T : class
        {
            QueryContainer q = new QueryContainer();
            for (int i=0;i<=fields.Length-1;i++)
            {
                q |= descriptor.Match(t => t.Field(fields[i]).Query(value));
            }
            return q;
        }

var searchResponse = await _elasticClient.SearchAsync<T>(s => s
                                   .Index(indexName)
                                   .Query(q => q
                                     .Bool(b => b
                                         .Should(sh=> MatchAny(sh, fieldNames, fieldValue)
                                         )
                                     ))
                                  ).ConfigureAwait(false);

but getting compile error :

cannot convert from 'string[]' to 'Nest.Field[]'

so how to iterate fields as per coming no of inputs in NEST queries ?

0 Answers
Related