看,灰机...

elastic搜索排序问题,如果人为的影响score得分结果?

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

我的index下面有8个分类,company, companyInfo, category,address 这四个都是text类型,Analyzer用的是ik_max_word,剩下四个country,website,phone,URL_ID用的都是keyword类型,现在我的代码是在每次搜索的时候,匹配,company, companyInfo, category这三个type,然后根据score从高到底排序展示.
 
{
"query": {
"bool": {
"should": [
{"match": {
"company": key_words
}},
{"match": {
"companyInfo": key_words
}},
{"match": {
"category": key_words
}}
]
}
},
"from": (page - 1) * 10,
"size": 10,
"highlight": {
"pre_tags": ['<span class="keyWord">'],
"post_tags": ['</span>'],
"fields": {
"company": {},
"category": {},
"companyInfo": {}
}
},
"collapse": {
"field": "phone"
},
"sort": [
{"_score": {"order": "desc"}},
{"companyInfo": {"order": "desc", "mode": "max"}}
],
"aggs": {
"total": {
"cardinality": {
"field": "phone"
}
}
}
}
现在我的需求是,有没有什么办法,可以人为的影响搜索结果,我想让我指定的company排在最前面.例如搜索某个category,或者某个关键字,出来与这个关键字相关的结果,可以让我把指定的company排在这个list的最上面.就是类似与百度竞价排名,把收费客户的信息一直在搜素结果的最上面显示.希望高人帮我解答,谢谢.
 
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

1boost提升字段权重
2function_score人工干预评分

rochy - rochy_he

赞同来自:

一个简单的方案就是,给每个公司添加一个 boost 字段,不同公司权重不一样,竞价排名的分要高很多;
这样搜索的时候使用 function_score_query 结合你上述的搜索,然后将得分 _score 乘以 boost 字段的  value 作为最终得分
 
可以参考文章:https://blog.csdn.net/dm_vince ... 01721

zz_hello

赞同来自:

目前也是和楼上同样的思路,使用function_score。一种是在原有的字段上在加一个类似权重的字段,然后使用field_value_factor的方法,给你想要的公司更高的权重。另一种是使用过滤集,在主查询之后加上过滤集,给过滤集中匹配到的公司更高的权重。以下两个链接里面有详细的参数
https://www.elastic.co/guide/c ... .html
https://www.elastic.co/guide/c ... .html

要回复问题请先登录注册