使用NEST 7的功能分数查询中的弹性搜索过滤器

问题描述

在我的情况下,我必须先显示库存商品,然后鼓励某些品牌,也鼓励某些品牌

我正在尝试使用功能得分查询https://www.elastic.co/guide/en/elasticsearch/client/net-api/5.x/function-score-query-usage.html

来实现它

我尝试了文档代码,它返回有效结果。库存物品排在第一位,阻止品牌进入预期的最后一页。 但是我的问题是鼓励品牌不要排在第一位。

这是我的代码,其中包含一些示例品牌,例如,以库存商品为第一,而Orange品牌为第一。

var query = new FunctionscoreQuery()
            {
                Name = "product_query",Boost = 5,Query = new MatchAllQuery { },Functions = new List<IscoreFunction>
                            {
                                //new RandomscoreFunction
                                //{
                                //    Filter = new MatchQuery { Field = "ManufacturerName",Query = "Apple" },//    Weight = 35
                                //},//new RandomscoreFunction
                                //{
                                //    Filter = new MatchQuery { Field = "ManufacturerName",Query = "Orange" },//    Weight = 52
                                //},new WeightFunction
                                {
                                    Filter = new MatchQuery { Field = "ManufacturerName",Weight = 25
                                },Weight = 42
                                },new WeightFunction 
                                {
                                    Filter = new MatchQuery{ Field = "StockAvailability",Query = "true"},Weight = 42
                                }
                           },MaxBoost = 42,scoreMode = FunctionscoreMode.Max,BoostMode = FunctionBoostMode.Multiply,Minscore = 42
            };

这是我的查询

GET dev-products/_search?
{
  "from": 0,"profile": true,"query": {
    "function_score": {
      "boost_mode": "multiply","functions": [
        {
          "filter": {
            "match": {
              "manufacturerName": {
                "query": "Apple"
              }
            }
          },"weight": 25
        },{
          "filter": {
            "match": {
              "manufacturerName": {
                "query": "Orange"
              }
            }
          },"weight": 42
        },{
          "filter": {
            "match": {
              "stockAvailability": {
                "query": "true"
              }
            }
          },"weight": 42
        }
      ],"max_boost": 42,"min_score": 42,"query": {
        "bool": {
          "filter": [
            {
              "bool": {
                "must": [
                  {
                    "range": {
                      "price_AU": {
                        "gte": 0
                      }
                    }
                  },{
                    "range": {
                      "price_AU": {
                        "lte": 100000000
                      }
                    }
                  }
                ]
              }
            }
          ],"must": [
            {
              "match_all": {}
            }
          ]
        }
      },"score_mode": "max","boost": 5,"_name": "product_query"
    }
  },"size": 9,"sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ],"version": true
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...