ES按名称查询数据时,相同名称的数据评分不同问题

本文探讨了在使用Elasticsearch进行人员信息查询时遇到的同名人员匹配度不同导致排序错误的问题。详细分析了问题的原因在于ES的分片存储机制下,各分片计算评分不一致。提出了两种解决方案:一是通过增大分片数据量使评分趋于一致;二是采用dfs_query_then_fetch查询方式统一计算评分,但可能会影响性能。

问题背景:我在做es查询人员信息的时候,按照人员姓名模糊查询,需要按照匹配度降序排序,并按照年龄降序排序

问题现象:相同名称的人员,比如马云,匹配度不同,导致展示的时候,年龄小的马云却排在了年龄大的马云之前,因为年龄小的马云评分高

问题原因:es索引是分片存储的,查询计算评分的时候,是每个分片单独计算的,所以会出现相同名称的人员评分不同的问题、

解决方案:

1、与产品沟通,当数据量足够大时,每个分片数据近似相同,则各个分片计算出来的评分会很相近

2、查询的时候增加查询条件(dfs_query_then_fetch),不让各个分片单独计算得分,而是统一计算,这样会有一定的性能影响,官方文档也不建议这么做https://www.elastic.co/guide/en/elasticsearch/guide/2.x/relevance-is-broken.html

searchRequest.searchType("dfs_query_then_fetch");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值