• 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等。

  • 相关阅读:
    wp之动态初始屏幕
    C#实现简易ajax调用后台方法
    扩展JavaScriptSerializer之Camelcase属性名
    wp之切换图片动画
    JQuery.Ajax用法
    工欲善其事,必先利其器
    asp.net中使用自定义的config文件
    windows phone7 学习笔记15——Bing Maps
    wp7屏幕截图代码
    windows phone7 学习笔记13——Panorama和Pivot
  • 原文地址:https://www.cnblogs.com/bt2882/p/15242671.html
Copyright © 2020-2023  润新知