Эластичный поиск NEST function_score условия динамического фильтра - PullRequest
0 голосов
/ 17 мая 2018

Я использую function_score для вычисления веса на основе условий фильтра, у меня так много условий фильтрации, есть ли динамические способы добавления фильтров и весов соответственно?

var functions = new List<Func<FunctionScoreFunctionsDescriptor<ResidentialDetails>, FunctionScoreFunction<ResidentialDetails>>>();
var scaleDaysForSorting = 12d;
            functions.Add(fn => fn.Gauss(g => g.DateCreated, g => g.Scale(scaleDaysForSorting))
                                            .Weight(8.5)
                                            .Filter(f =>
                                            {
                                                return filters[term] && filters[refine] && filters[standard] && filters[imageExists];
                                            }));
            functions.Add(fn => fn.Gauss(g => g.DateCreated, g => g.Scale(scaleDaysForSorting))
                                            .Weight(8)
                                            .Filter(f =>
                                            {
                                                return filters[term] && filters[refine] && filters[standard] && filters[imageDoesNotExists];
                                            }));
            functions.Add(fn => fn.Gauss(g => g.DateCreated, g => g.Scale(scaleDaysForSorting))
                                    .Weight(7.5)
                                    .Filter(f =>
                                    {
                                        return filters[term] && filters[refine] && filters[premium] && filters[imageExists];
                                    }));
            functions.Add(fn => fn.Gauss(g => g.DateCreated, g => g.Scale(scaleDaysForSorting))
                                    .Weight(7)
                                    .Filter(f =>
                                    {
                                        return filters[term] && filters[refine] && filters[premium] && filters[imageDoesNotExists];
                                    }));
            functions.Add(fn => fn.Gauss(g => g.DateCreated, g => g.Scale(scaleDaysForSorting))
                                   .Weight(6.5)
                                   .Filter(f =>
                                   {
                                       return filters[term] && filters[refine] && filters[unclaimed] && filters[imageExists];
                                   }));
...