elasticsearch 结合过滤器和功能评分-弹性搜索获胜';你不计算分数吗?
我有elasticsearch 结合过滤器和功能评分-弹性搜索获胜';你不计算分数吗?,elasticsearch,search,elasticsearch,Search,我有帖子索引,我想 a) 按日期筛选所有帖子,即仅在给定日期之前创建的返回帖子 b) 对结果应用功能评分 我提出了一个类似这样的问题: get posts/_search { "query": { "function_score": { "query": { "bool": { "filter": [ {
帖子
索引,我想
a) 按日期筛选所有帖子,即仅在给定日期之前创建的返回帖子
b) 对结果应用功能评分
我提出了一个类似这样的问题:
get posts/_search
{
"query": {
"function_score": {
"query": {
"bool": {
"filter": [
{
"range": {
"created_at": {
"lte": "2020-09-12T17:23:00Z"
}
}
}
]
}
},
"functions": [
{
"field_value_factor": {
"field": "likes",
"factor": 0.1,
"modifier": "ln1p",
"missing": 1
}
}
],
"score_mode": "sum"
}
},
"from": 0,
"size": 10
}
然而,问题是弹性搜索不将分数应用于结果,所有文档都有0.0
分数。我可以通过将过滤器移动到函数中来“欺骗”ES,然后它确实工作了,但我觉得它不是最优的,你知道为什么上面的查询不会返回分数吗
“作弊”查询的示例,该查询会计算每个文档的分数:
get posts/_search
{
"query": {
"function_score": {
"functions": [
{
"filter": {
"range": {
"created_at": {
"lte": "2020-09-12T17:22:58Z"
}
}
},
"weight": 100
},
{
"gauss": {
"created_at": {
"origin": "2020-09-12T17:22:58Z",
"scale": "1h",
"decay": 0.95
}
}
},
{
"field_value_factor": {
"field": "likes",
"factor": 0.1,
"modifier": "ln1p",
"missing": 1
}
}
]
}
},
"from": 0,
"size": 10
}
过滤器不影响分数。只是0或1。 为了能够通过函数\分数查询影响分数,您必须使用计算分数的函数(匹配、匹配\短语、地理查询等) 您可以了解有关上下文的更多详细信息 字段\值\因子,但在您的第一次查询中,您在此阶段没有任何评分,因为它几乎与相同数量的订购相同 在第二个查询中,您计算一个分数,该分数取决于您的文档的最近程度,然后使用likes来影响它。这就是它起作用的原因