首页 > 解决方案 > 如何使用数据库有效地修改句子中的单词?

问题描述

我有 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 个文档,这实际上降低了我的应用程序的性能。谁能建议我应该用这种方法或任何最佳方法做什么?或者我需要在这里使用弹性搜索吗?

标签: mongodbperformanceelasticsearchmongodb-queryaggregation-framework

解决方案


您应该使用内存中的键值数据库(如 Redis)作为中间层,而不是使用基于文件系统的数据库。
每次启动你的应用程序时,它都会将你所有的表和记录从 Mango 读取到 Redis 中,然后你从 Redis 中查询你的单词。更新 Mango DB 后,您只需重新启动应用程序即可刷新内存数据库。


推荐阅读