mongodb - 如何使用数据库有效地修改句子中的单词?
问题描述
我有 700K 字数据,我以如下格式保存在 mongodb 中:
[{
"_id":"1",
"word":"janji",
"malay_word":" janji",
"english_word":"promise",
"word_count":1
},{
"_id":"2",
"word":"kena",
"malay_word":"kena",
"english_word":"hit",
"word_count":1
},{
"_id":"3",
"word":"love",
"malay_word":"cinta",
"english_word":"love",
"word_count":1
},{
"_id":"4",
"word":"love you",
"malay_word":"cinta kamu",
"english_word":"love you",
"word_count":2
}]
所以我正在做什么将句子从一种语言转换为另一种语言,
sentence = "kena love you"
第一步:拆分句子
sentence = sentence.split(" ")
第 2 步:为每个单词生成正则表达式
regular_expressions_list = []
for(let i=0;i < sentence.length;i++) {
regular_expressions_list.push("/^" + sentence[i] + "\b((?!-).)*$/")
}
第 3 步:从 mongo 搜索
db.collectionName.find({"word" : {$in : regular_expressions_list }}).sort({"word_count" : 1})
第 4 步:从我从 mongodb 获得的数据中替换单词(注意:我必须从较高的字数开始替换单词 [word_count 是单词字段长度])
问题: 所以我面临的问题是,当我从 mongodb 搜索大约(100 个单词)的大文本时,我得到了超过 5000 个文档,这实际上降低了我的应用程序的性能。谁能建议我应该用这种方法或任何最佳方法做什么?或者我需要在这里使用弹性搜索吗?
解决方案
您应该使用内存中的键值数据库(如 Redis)作为中间层,而不是使用基于文件系统的数据库。
每次启动你的应用程序时,它都会将你所有的表和记录从 Mango 读取到 Redis 中,然后你从 Redis 中查询你的单词。更新 Mango DB 后,您只需重新启动应用程序即可刷新内存数据库。
推荐阅读
- redis - 为什么我的 redis 服务器每分钟关闭一次?
- optimization - 我们可以使用强化学习在成本函数中获得预定义常量的“好”值吗?
- r - 在 R 中调用函数内部的变量
- cmake - 使用 cmake 构建 mxnet 无法找到 mkl_blas.h
- apache-spark - Spark 3.1 - Java 失败并出现 IllegalArgumentException:无法增长 BufferHolder 错误
- c - 如何在 scanf("%d%c"); 中只输入字符
- javascript - Vue如何将嵌套数组合并为一个数组
- qt - 如何在 ui 窗口中创建草图区域
- apache-spark - 无法使用 Jupyter Notebook 停止火花上下文
- nginx - Nginx error_page 仅适用于 fastcgi