问题背景:我在做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");

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

被折叠的 条评论
为什么被折叠?



