MongoDB コレクションに逆リストを作成したいと考えています。コレクションは次のようになります。
{ "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
にマップdocument
されposition
ます。たとえば、単語 2 は文書 1 の位置 1 にあり、単語 9 は文書 2 の位置 2、43、および 1246 にあります。
データベースに追加したいすべての新しいドキュメントは、単語 ID を持つ単純な配列です。
[23, 43, 75, 18, ... ]
したがって、spring-mongo を使用すると、次の Java コードがあります。
for (int i=0; i < array.length; i++) {
invertedListDao.upsert(array[i], documentId, i);
}
(upsertメソッドは私が実装しています)
このソリューションは機能しますが、ドキュメントに 100,000 語が含まれている場合、mongo に 100,000 クエリが必要です。
最後に、私の質問は次のとおりです。これをより速く行う方法はありますか? 例: 配列全体を一度にクエリし、これを db で実行しますか? eval
に関数があることは知っていますがmongo
、にはありませんmongo-spring