用HashMap实现简单的倒排索引

简述

搜索引擎通常检索的场景是:给定几个关键词,找出包含关键词的文档
用HashMap实现倒排索引的设想:
举例 有三本书,每本书中都会有几个关键字,通过关键字来检索到出现在那几本书中
实行:创建两个hashmap,一个用来存放原数据,一个用来存放新索引,以原数据的value分割后的单词做新索引的key,以原数据的value对应的key做索引value,添加到新索引中

实现

 public static void main(String[] args) {
        //存储数据map
        HashMap date = new HashMap();
        date.put("book1","hello world");
        date.put("book2","hello beautiful world");
        date.put("book3","hello beautiful new world");
        //索引的map
        HashMap index = new HashMap();
        Set keySet = date.keySet();
        //遍历date的key
        for (Object word:keySet) {
            String keyString = (String) word;
            //通过key获得value
            String count = (String) date.get(keyString);
            //将字符串分割成数组
            String[] words = count.split(" ");
            //遍历数组,获取关键字
            for (int i = 0; i <words.length ; i++) {
                //判断索引中是否存在关键字,如果不存在添加,存在将追加
                if (!index.containsKey(words[i])){
                    //创建一个arrylist用来添加或后续追加索引值
                    ArrayList books = new ArrayList();
                    //将date的key存入
                    books.add(keyString);
                    //将新组建的键值对存入索引
                    index.put(words[i],books);
                }
                else {
                    //如果存在关键字,通过关键字获取value,
                    List books = (List) index.get(words[i]);
                    //将date的key追加到value中
                    books.add(keyString);
                }
            }
        }
        //输出新map
        System.out.println(index);

    }

输出结果

{beautiful=[book2, book3], new=[book3], world=[book2, book1, book3], hello=[book2, book1, book3]}

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_38384971/article/details/81136212