Easysearch、Elasticsearch 还是 Opensearch,是个问题

如何在搜索结果中加入概率?

Elasticsearch | 作者 401825317 | 发布于2018年12月11日 | 阅读数:1366

大佬们我有一个问题 我如何在es中使用概率搜索?就是前10个数据中A部分数据百分之10,B部分百分之20,C部分百分之70,然后每一次分页查询都基本满足这个概率即可,
目前使用了function_score 达到了这样得排序结果,就是0到100是C部分数据,100-200是B部分数据,200往后是C部分数据,有点不对。。。所以想请教一下大佬
 
{
"query" : {
"function_score" : {
"query" : {
"bool" : {
"must" : [
{
"exists" : {
"field" : "title",
"boost" : 1.0
}
},
{
"exists" : {
"field" : "content",
"boost" : 1.0
}
},
{
"term" : {
"recommend" : {
"value" : 1,
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"functions" : [
{
"filter" : {
"range" : {
"ptime" : {
"from" : 1541906309251,
"to" : null,
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
},
"weight" : 1.0
},
{
"filter" : {
"range" : {
"ptime" : {
"from" : 1536635909254,
"to" : 1541906309254,
"include_lower" : true,
"include_upper" : false,
"boost" : 1.0
}
}
},
"weight" : 1.0
},
{
"filter" : {
"range" : {
"ptime" : {
"from" : 1528687109254,
"to" : 1536635909254,
"include_lower" : true,
"include_upper" : false,
"boost" : 1.0
}
}
},
"weight" : 1.0
},
{
"filter" : {
"range" : {
"ptime" : {
"from" : 1512962309254,
"to" : 1528687109254,
"include_lower" : true,
"include_upper" : false,
"boost" : 1.0
}
}
},
"weight" : 1.0
},
{
"filter" : {
"range" : {
"ptime" : {
"from" : null,
"to" : 1512962309254,
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
},
"weight" : 1.0
}
],
"score_mode" : "sum",
"boost_mode" : "multiply",
"boost" : 1.0
}
},
"size": 8071
}
已邀请:

401825317 - 90后it男

赞同来自:

所有的boost和weigh都不加的,其他搜索条件不变,所有的结果集的score都是3

medcl - 今晚打老虎。

赞同来自:

你用 multi_search,写3个查询,分别设置不同的 size 是不是就可以满足你的需求。

要回复问题请先登录注册