list怎么根据权重排序

一个搜索列表的接口,要求列表展示出来:优先展示字数最少的,字数相同的情况下,按引用次数排序,引用次数相同的情况下,按字母排序,这个我看过es做过,但是es不会玩儿,还没到那个水准- -javaAPI应该怎么实现啊

如果是你自己的需求需要实现一个有该功能的接口的话,调用需要排序的列表的sort方法,入参实现Comparator接口,重写里面的compare方法

        // list是你要排序的对象的List(或其他集合)
        // 这里假设你要排序的对象是Book类
        List<Book> list = new ArrayList<>();
        // 填充数据...后用sort方法排序
        list.sort(new Comparator<>() {
            @Override
            public int compare(Book o1, Book o2) { // 这里o1 o2对象需要跟你要排序的对象是同类
                // 先按字母数量从小到大排序
                if (o1.getWordNum() != o2.getWordNum()){
                    return o1.getWordNum() - o2.getWordNum();
                }
                // 按引用次数从小到大排序
                if (o1.getReferedTimes() != o2.getReferedTimes()){
                    return o1.getReferedTimes() - o2.getReferedTimes();
                }
                // 按字母从小到大排序
                return o1.getLetters() - o2.getLetters();
            }
        });
  1. 考虑需求的合理性
  2. 考虑需求的ROI
  3. 考虑需求如何实现:把需要排序的字段单独领出来,比如你这里的字数,引用次数(这个不确定你的引用能否计算出来),然后再按字母排序(需要注意是keyword,如果长的话比较耗费资源的)

我给你列一个demo :



GET /index/_search
{
  "sort": [
    {
      "wordNum": {
        "order": "asc"
      }
    },
    {
      "refrenceNum": {
        "order": "desc"
      }
    },
    {
      "xxx.keyword": {
        "order": "desc"
      }
    }
  ]
}

如果是jdk实现的话,可以直接使用list.sort(排序类),对应排序类写法:https://zhuanlan.zhihu.com/p/33636690

list.sort方法不是可以传入一个排序函数吗
你自己写好排序函数作为参数传进去

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632