如何使用.NET NEST Client在功能分数查询中创建过滤器

竞技

在Elasticsearch文档中,描述有关功能得分查询的显示代码,如下所示

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接口只允许ExponentialDecayFunctionGaussDateDecayFunctionLinearGeoDecayFunctionFieldValueFactorFunctionRandomScoreFunctionWeightFunctionScriptScoreFunction

拉斯·卡姆

函数是的集合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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.Net Nest中的ElasticSearch过滤器聚合

使用 Nest 过滤功能得分

使用 Elasticsearch .NET 和 NEST 6.x:如何从多个索引中多获取文档

如何避免使用Nest .NET 6.x将重复项发布到elasticsearch中?

使用 nest c# 的 Elasticsearch 过滤器组

如何调试Nest查询?

如何使用NEST .net客户端库为ElasticSearch创建查询以匹配子集合属性?

Elastic Search NEST-如何在搜索中具有多个级别的过滤器

如何在.NET Core应用程序中创建和实现授权过滤器

使用NEST构建静态查询

MongoDB中的操作员可以使用官方.NET驱动程序使用多过滤器执行查询

NEST有多个条件的条件过滤器查询

elasticsearch.net(NEST) 中的等效 linq 查询

如何在.Net核心中将弹性查询聚合过滤器转换为嵌套查询

如何为Laravel搜索过滤器功能创建查询语句?

如何使用NEST客户端动态建立Bool查询?

如何使用NEST准确表示此ElasticSearch查询?

如何使用ElasticSearch Nest版本7.x创建IndexTemplate

使用NEST / Elasticsearch.Net执行原始JSON请求

聚合上的弹性NEST过滤器

使用NEST使用linq查询弹性搜索

如何使用过滤器从列表中查询?

如何使用NEST从Elasticsearch文档中删除字段值?

如何使用typeorm在nest js中存储大整数

如何使用 Swagger 在 Nest js 中对端点进行分组

在 Elastic Search Nest Client .NET 中实现搜索查询的异步方式

如何在Lucene.Net中使用Whitespaceanalyzer和LowerCase过滤器创建自己的分析器?

是否可以在NEST上查询多个术语字段(.NET)的聚合?

如何使用 elasticsearch.net/nest 6.x 更新 _doc 类型的设置