一尘不染

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

elasticsearch

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


阅读 326

收藏
2020-06-22

共1个答案

一尘不染

Mongo本身不支持“临时”集合。

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

同样,由于IO方面的考虑,将说1万条记录的结果集写入Mongo或另一个DB通常是个坏主意。

对于您所说的内容,有一个功能请求: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用作存储引擎来完成其他任务。

2020-06-22