2

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

4

3 回答 3

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 用作进一步任务的存储引擎。

于 2012-06-20T14:10:12.497 回答
0

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

于 2013-05-20T15:44:02.540 回答
0

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

于 2012-06-23T09:17:42.753 回答