我如何用mongodb中的单词对数据进行分类?

时间:2018-05-03 23:06:24

标签: java mongodb

我是一名试图熟悉MongoDB的学生。

我目前正在Java制作一个使用twitter流获取推文的程序,并使用MongoDB将这些推文存储到数据库中。

我已经完成了将推文保存到MongoDB,现在我想用这些词来对这些推文进行分类。

喜欢这样:

让我们说:

Tweet1 = " I am A" 
Tweet2 = "I am B"

我想做的是当我以某种方式对它们进行分类时,我希望它看起来像这样:

I :  Tweet1, Tweet2
Am : Tweet1, Tweet2
A : Tweet1
B : Tweet2

我必须使用索引吗?无论是实际更改数据库还是仅搜索索引都无关紧要。我只希望我的结果看起来像这样。

这是我第一次使用数据库,所以所有这些索引和db的东西对我来说真的很混乱。

如果有人能为我提供一些提示,那就太好了。

谢谢!

1 个答案:

答案 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]