简述
搜索引擎通常检索的场景是:给定几个关键词,找出包含关键词的文档
用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