如何在temp db中存储查询输出?

时间:2012-06-20 12:55:04

标签: mongodb elasticsearch

我对编程很新,但我正在研究它。我有一个问题,我不知道如何解决。 我在mongoDB中有文档集合,我正在使用Elasticsearch来查询字段。问题是我想将搜索的输出存储在mongoDB中,但存储在不同的DB中。我知道我必须创建临时数据库,必须使用每个搜索结果进行更新。但是怎么做呢?或者给我阅读文档,以便我可以学习它。我将非常感谢你的帮助!

3 个答案:

答案 0 :(得分:3)

Mongo本身不支持“临时”收藏。

这里要做的一件典型事情是不要将整个结果输出实际写入另一个数据库,因为这样做完全没有意义,因为Elasticsearch会自己进行缓存,因此你不需要顶层的任何层。

同样,由于IO问题,将一组10k记录的结果集写入Mongo或其他数据库通常是一个坏主意。

您所谈论的内容有一个功能请求:https://jira.mongodb.org/browse/SERVER-3215但尚无规划。

实施例

你可以有一张结果表。

在此表格中,您将拥有一个类似以下的文档:

{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创建一种输入“流”。它可以做得很好。

然后,这应该为您提供一个可分割的单词和语言动词列表,以处理诸如MR和东西之类的内容,以汇总有关它们的统计信息。

如果不了解您的情景越来越多,这几乎是我最好的答案。

这不使用临时表概念,而是使您的数据永久保留,因为您希望将Mongo用作进一步任务的存储引擎,因此它的声音很好。

答案 1 :(得分:0)

实际上有一个MongoDB河流插件可以与Elasticsearch一起使用...

答案 2 :(得分:0)

db.your_table.find().forEach(function(doc) { b.another_table.insert(doc); } );