zoukankan      html  css  js  c++  java
  • ES 使用权重排序

    一.场景 

      现在有个文章列表查询需求,自己写的文章要排在最上面,然后在根据,是否精品文章,然后得分最高,最后在根据创建时间,降序排序.

    二. 分析

           

      MYSQL中:  其他的条件都比较简单,通过字段排序就可以了,唯一有点麻烦的就是自己的要排在前面,这种我们通过case when 和 userId 一比较相等的为1不得的为0, 然后给个别名,通过这个别名排序也可以实现

      ES中:  其他字段也一样排序,通过字段排序就可以, 有问题的就是,自己写的文章要排在最前面,相当于我们需要通过传入用户id,来查询,因为用户id是动态的没有办法像mysql 一样写case when 来比较,不过 ES 中提供了给文档加权重的方式来排序

       

    三.  初始化数据

      实体字段: 

      

    ES:保存在es中的数据

    四.  编码

     weightFactorFunction

      在 ES 搜索结果中_score 这个字段相信大家并不陌生,这是 ES 给出的评分,我们可以根据评分来排序,然后将原创类型的评分提高就可以实现想要的效果。

    JAVA代码:

    结果按照了给定字段排序:

     

     scriptFunction

    除了使用 weightFactorFunction 来设置权重,另外介绍一种灵活度更高,适用于更复杂的排序场景的方式 scriptFunction。

    scriptFunction 允许我们通过脚本的方式来实现权重,直接看代码:

    查询结果满足条件:

    
    

    scoreScript 就是控制权重的脚本,也就是一段代码(脚本默认是 groovy),是不是方便的多,支持的脚本语言有groovy,js,python等。

  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/bt2882/p/15242671.html
Copyright © 2011-2022 走看看