问题描述
在我的情况下,我必须先显示库存商品,然后鼓励某些品牌,也鼓励某些品牌。
我正在尝试使用功能得分查询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 (将#修改为@)