看,灰机...

elasticsearch打分优化

Elasticsearch | 作者 Backer | 发布于2017年09月04日 | 阅读数:6669

比如搜索“感冒",
有如下2个标题:
1,"感冒感冒感冒感冒感冒感冒"
2,"感冒了,要吃什么药"

如何让标题2的评分比标题1的评分高
 
已邀请:

白衬衣 - 金桥

赞同来自: medcl venyowang private_void hufuman

我猜测你想要的是降低词频评分的权重,可以在索引的mapping中禁用词频评分,"index_options": "docs"

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

赞同来自:

先不说如何提升权重,你这个问题能不能转换下。搜索标题2中既包含“药”又包含“感冒”的,自然得分比第一个高了。

linxiuyuan

赞同来自:

你这个问题在 oschina 中有讲解,不过要花钱。关注中...

Cheetah

赞同来自:

这个实际是看lucene的评分机制,评分里面有个文档频率,表示搜索的词在本文档中出现的频率,频率越高,得分越高,还有个因素是文档长度,文档长度越短,得分越高
 
从这个评分机制来讲,上面2个标题不做特殊处理,搜索的结果肯定多次出现感冒的评分更高
 
如果想更改评分,一种是通过其他字段增加你想要文档的权重,一种是直接弃用lucene评分,自己按自己的规则来

kepmoving - 90后

赞同来自:

可以用​
ConstantScoreQueryBuilder来忽略es默认的打分规则,搜索感冒出来的两篇文档分应该是一样的,然后你可以自己再根据其他的属性来提高后一篇文档的权重

AlixMu - Elasticsearch小轿车司机

赞同来自:

如果单纯的考虑这个问题,用评分函数可以实现的

joeywen

赞同来自:

试试通过Function Score Query:https://www.elastic.co/guide/e ... .html,来自定义优化下看看

要回复问题请先登录注册