我想使用弹性搜索功能得分来定制评分,这些是我的排名优先级:
查询的常用术语数量(例如,查询中包含4个术语中的3个的文档应排名高于查询中包含4个术语中的2个的文档,无论tf / idf得分多少每个学期)。在弹性文档中,它被称为coordination factor。
术语相关性的总和。 (TF / IDF)
文档受欢迎程度(boosting by popularity中描述的每个文档的投票数)
这是目前使用的弹性搜索请求的主体:
body = {
"query": {
"function_score": {
"query": {
{'match': {'text': query}}
},
"functions": [
{
"field_value_factor": {
"field": "ducoumnet_popularity",
}
}
],
}
}
}
问题是此请求不满足第一优先级。例如,可能存在文档A,其与查询的常用术语不如文档B,但由于其常用术语具有更多的tf / idf分数,因此文档A的排名高于文档B.
为了防止这种情况,我认为最好的办法是通过协调因素提高文件得分。有没有办法做到这一点?类似于这个要求:
body = {
"query": {
"function_score": {
"query": {
{'match': {'text': query}}
},
"functions": [
{
"field_value_factor": {
"field": "ducoumnet_popularity",
},
"field_value_factor": {
"field": "_coordination"
"weight": 10
}
}
],
}
}
}
答案 0 :(得分:0)
我没有找到这个问题的确切答案,但是它可能会帮助某人知道您可以使用minimum_should_match
来限制文档的最低精度。
{
"query": {
"match": {
"content": {
"query": "quick brown dog",
"minimum_should_match": 75%
}
}
}
}
它接受许多不同的配置。更多说明: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html