首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蒙古族建立倒排表的快速方法

蒙古族建立倒排表的快速方法
EN

Stack Overflow用户
提问于 2015-04-03 14:07:48
回答 1查看 157关注 0票数 3

我想在我的MongoDB集合中构建倒排列表。集合如下:

代码语言:javascript
复制
{ "word" : 2, "docToPos" : { "1" : [ 0 ] } }
{ "word" : 5, "docToPos" : { "1" : [ 1 ] } }
{ "word" : 1, "docToPos" : { "1" : [ 2 ], "2" : [ 1 ] } }
{ "word" : 9, "docToPos" : { "2" : [ 2, 43, 1246 ] } }

word是字典中的一个id,docToPos是映射documentposition的地图--例如单词2在1号文件的位置1,在第2、43和1246位置的第2号文档中。

我想要添加到数据库中的每一个新文档都只是一个带有word id的数组:

代码语言:javascript
复制
[23, 43, 75, 18, ... ]

所以使用spring-mongo,我有一个java代码:

代码语言:javascript
复制
for (int i=0; i < array.length; i++) {
  invertedListDao.upsert(array[i], documentId, i);
}

(upsert方法是由我实现的)

这个解决方案是可行的,但是如果文档有10万字,那么mongo需要100000个查询。

最后,我的问题是:塞拉是否能更快地做到这一点?一次查询整个数组,然后在db中执行?我知道eval函数存在于mongo中,但在mongo-spring中却没有

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-06 07:46:07

提高性能的一种方法是使用散装鞋帮

代码语言:javascript
复制
var bulk = db.invertedListDao.initializeUnorderedBulkOp();
for (var i=0; i < array.length; i++){
  bulk.find({...}).upsert().replaceOne({...})
}
bulk.execute();

它更有效率的原因,以及你可以预期的速度提升,都在我在这里的回答中概述了,但是基本上,不管你有多少单词,你只会做,只调用1次

我不熟悉java spring,但我的基本搜索表明它是支持的和我希望您能够找到如何在您的java驱动程序中实现批量上服务器。

P.S.,在Bartektartanus的帮助下,这里是链接到正式文件

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29433756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档