我是一名试图熟悉MongoDB
的学生。
我目前正在Java
制作一个使用twitter流获取推文的程序,并使用MongoDB
将这些推文存储到数据库中。
我已经完成了将推文保存到MongoDB
,现在我想用这些词来对这些推文进行分类。
喜欢这样:
让我们说:
Tweet1 = " I am A"
Tweet2 = "I am B"
我想做的是当我以某种方式对它们进行分类时,我希望它看起来像这样:
I : Tweet1, Tweet2
Am : Tweet1, Tweet2
A : Tweet1
B : Tweet2
我必须使用索引吗?无论是实际更改数据库还是仅搜索索引都无关紧要。我只希望我的结果看起来像这样。
这是我第一次使用数据库,所以所有这些索引和db的东西对我来说真的很混乱。
如果有人能为我提供一些提示,那就太好了。
谢谢!
答案 0 :(得分:1)
这是倒置索引。有了这个词,你想快速查找包含它的推文。下面是执行此操作的示例Java
代码。在编写两个示例推文时,您将包含从MongoDB
中提取它们的代码。
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.TreeMap;
public class SimpleInvertedIndex {
public static void main(String[] args) {
//inverted index
Map<String, LinkedList<String>> index = new TreeMap<>();
//tweets data
Map<String, String> tweets = new HashMap<>();
//Sample tweets
tweets.put("Tweet1", " I am A");
tweets.put("Tweet2", "I am B");
//build the inverted index
for (Map.Entry<String, String> entry : tweets.entrySet()) {
String tweetId = entry.getKey();
String[] values = entry.getValue().trim().split(" ");
for (int i = 0; i < values.length; i++) {
index.putIfAbsent(values[i], new LinkedList<>());
LinkedList<String> updatedList = index.get(values[i]);
updatedList.add(tweetId);
index.put(values[i], updatedList);
}
}
//verify by printing out
for (Map.Entry<String, LinkedList<String>> entry : index.entrySet()) {
System.out.print(entry.getKey() + " : ");
System.out.print(entry.getValue());
System.out.println();
}
}
}
输出:
A : [Tweet1]
B : [Tweet2]
I : [Tweet2, Tweet1]
am : [Tweet2, Tweet1]