elasticsearch,Mongodb,elasticsearch" /> elasticsearch,Mongodb,elasticsearch" />

Mongodb 如何在临时数据库中存储查询输出?

Mongodb 如何在临时数据库中存储查询输出?,mongodb,elasticsearch,Mongodb,elasticsearch,我对编程很陌生,但我正在学习。我有一个问题我不知道怎么解决。 我在mongoDB中收集了文档,我正在使用Elasticsearch查询字段。问题是我想将搜索的输出存储回mongoDB,但存储在不同的DB中。我知道我必须创建临时数据库,该数据库必须随每个搜索结果更新。但如何做到这一点呢?或者给我一些文档让我读,这样我就可以学习了。我将非常感谢你的帮助 Mongo本机不支持“临时”集合 这里典型的做法是不将整个结果输出写入另一个DB,因为这完全没有意义,因为Elasticsearch有自己的缓存,因

我对编程很陌生,但我正在学习。我有一个问题我不知道怎么解决。
我在mongoDB中收集了文档,我正在使用Elasticsearch查询字段。问题是我想将搜索的输出存储回mongoDB,但存储在不同的DB中。我知道我必须创建临时数据库,该数据库必须随每个搜索结果更新。但如何做到这一点呢?或者给我一些文档让我读,这样我就可以学习了。我将非常感谢你的帮助

Mongo本机不支持“临时”集合

这里典型的做法是不将整个结果输出写入另一个DB,因为这完全没有意义,因为Elasticsearch有自己的缓存,因此您不需要任何顶层

同样,由于IO方面的考虑,将一个10k记录的结果集写入Mongo或另一个DB通常不是一个好主意

对于您所谈论的内容,有一个功能需求:但目前还没有计划

例子 你可以有一个结果表

在此表中,您将有一个如下所示的文档:

{keywords: ['bok', 'mongodb']}

每次搜索和滚动每个结果项时,您都会在此表中写入一行,用该搜索结果中的关键字填充关键字字段。这将是每个搜索结果每个搜索结果列表每个搜索。最好是在每个搜索结果出现时将其流式传输到MongoDB。我从未编写过Python(尽管我希望学习),因此,请举一个伪代码示例:

var elastic_results = [{'elasticresult'}];
foreach(elastic_results as result){
    //split down the phrases in this result and make a keywords array
    db.results_collection.insert(array_formed_from_splitting_down_result); // Lets just lazy insert no need for batch or trying to shrink the amount of data to one go or whatever, lets just stream it in.
}
因此,当您继续您的结果时,您基本上只需以尽可能快的速度批量插入,并创建一种输入到MongoDB的“流”。它可以很好地做到这一点

然后,这将为您提供一个单词和语言动词的可共享列表,以处理诸如MRs on之类的内容,并汇总有关它们的统计信息

在不了解你的情况下,这几乎是我最好的答案


这并没有使用临时表的概念,而是使您的数据永久化,这听起来不错,因为您希望将Mongo用作后续任务的存储引擎。

事实上,MongoDB river插件可用于Elasticsearch…

db.your_table.find().forEach(函数(doc){b.other_table.insert(doc)});

看看这个。这可能会有一些帮助。但是在使用NoSQL DB的情况下该怎么办?是否仍有将输出存储为.txt文件的方法?因为我只需要提取输出结果以进行进一步的自然语言处理。是的,只需将elasticsearch返回的光标输入到您的语言fopen(我不确定您使用的是哪种服务器端语言)。使用减少的内存将文件压缩到文本文件应该可以做到这一点,另外,跨多个碎片分割文件会更容易。我的意思是,如果MongoDb仅用于此目的(用于存储语言处理的结果),您希望得到多少结果?它可以使用,但不能使用临时表。谢谢!我真的很感谢你的帮助!最后,你能给我推荐一些相关的文档吗?只是新手,还有很多东西要学)你在用什么语言?PHP/Java/C#/C++?一般文档可以在Mongo站点上找到:除此之外,更多细节取决于您的具体实现。如果您需要了解模式等或概念方面的帮助(当您将其固化一点时),只需问一个问题:)我从未编写过Python(尽管我希望这样),也没有编写过corpora或NLTK,所以这里开始摆脱我的束缚,但我已经在我的答案中添加了一些代码。