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
我必须为此使用索引吗?它实际上是在更改数据库还是只是通过索引搜索都没有关系。我只是希望我的结果看起来像这样。
这是我第一次使用数据库,所以所有这些索引和数据库的东西对我来说真的很困惑。
如果有人可以为此提供一些提示,那就太好了。
谢谢!
解决方案
这是一个倒排索引。给定一个词,您想快速查找包含它的推文。下面是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]
推荐阅读
- android - TimePickerDialog 中的标题
- gradle - 从 Gradle 4 迁移到 5。如何使用 mapstruct 1.20.final
- google-analytics-api - 为什么从 Google Analytics Reporting API 返回的数据行包含指标的零值?
- firebase - 使用 Vue js 进行 Firebase 查询
- java - 从 BigQuery 读取并将数据存储到 Google 存储(特殊字符问题)
- java - Selenium 无法识别 IE 中新打开的浏览器上的元素
- dart - 安装软件包时出现握手错误
- c# - 为什么正则表达式计数在 C# 中用作长度?
- fpu - gem5 (Alpha) 如何执行浮点运算?
- .net-core - Razor Pages - 返回模型值