Как создать фильтры в Запросе оценки функций с помощью .NET NEST Client - PullRequest
0 голосов
/ 04 декабря 2018

В документе Elasticsearch опишите о функции Score Query покажите код, как показано ниже

GET /_search
{
    "query": {
        "function_score": {
          "query": { "match_all": {} },
          "boost": "5", 
          "functions": [
              {
                  "filter": { "match": { "test": "bar" } },
                  "random_score": {}, 
                  "weight": 23
              },
              {
                  "filter": { "match": { "test": "cat" } },
                  "weight": 42
              }
          ],
          "max_boost": 42,
          "score_mode": "max",
          "boost_mode": "multiply",
          "min_score" : 42
        }
    }
}

Я пишу этот запрос в синтаксис инициализатора объекта

var searchRequest = new SearchRequest<ProductType>
{
   Query = new FunctionScoreQuery()
   {
      Query = new MatchAllQuery {},
      Boost = 5,
      Functions = new List<IScoreFunction>
      {
         Filters...?
      },
      MaxBoost = 42,
      ScoreMode = FunctionScoreMode.Max,
      BoostMode = FunctionBoostMode.Max,
      MinScore = 42
   }
};

Как создавать фильтры в функциях?

Интерфейс IScoreFunction допускает только ExponentialDecayFunction, GaussDateDecayFunction, LinearGeoDecayFunction, FieldValueFactorFunction, RandomScoreFunction, WeightFunction, ScriptScoreFunction

1 Ответ

0 голосов
/ 05 декабря 2018

Функции - это коллекция IScoreFunction.В примере JSON первая функция является функцией случайной оценки, а вторая - функцией веса.Связанный пример Query DSL содержит примеры различных функций, и вот пример для соответствия JSON выше

var client = new ElasticClient();

var searchRequest = new SearchRequest<ProductType>
{
    Query = new FunctionScoreQuery()
    {
        Query = new MatchAllQuery { },
        Boost = 5,
        Functions = new List<IScoreFunction>
        {
            new RandomScoreFunction
            {
                Filter = new MatchQuery
                {
                    Field = "test",
                    Query = "bar"
                },
                Weight = 23
            },
            new WeightFunction
            {
                Filter = new MatchQuery
                {
                    Field = "test",
                    Query = "cat"
                },
                Weight = 42
            }
        },
        MaxBoost = 42,
        ScoreMode = FunctionScoreMode.Max,
        BoostMode = FunctionBoostMode.Multiply,
        MinScore = 42
    }
};

var searchResponse = client.Search<ProductType>(searchRequest);
...