我试图找到数以百万计的tweets的唯一词,也是我想保持每个单词出现在那里。 除此之外,我还对他们最初的分组的话。 下面是一个示例代码:
from pymongo import UpdateOne
# connect to db stuff
for word in words: # this is actually not the real loop I've used but it fits for this example
# assume tweet_id's and position is calculated here
initial = word[0]
ret = {"tweet_id": tweet_id, "pos": (beg, end)} # additional information about word
command = UpdateOne({"initial": initial}, {"$inc": {"count": 1}, "$push": {"words.%s" % word: ret}}, upsert=True)
commands.append(command)
if len(commands) % 1000 == 0:
db.tweet_words.bulk_write(commands, ordered=False)
commands = []
然而,这是分析所有的鸣叫方式缓慢。 我猜测,我的出现问题,因为我不使用的索引words
场。
下面是一个文档的示例输出:
{
initial: "t"
count: 3,
words: {
"the": [{"tweet_id": <some-tweet-id>, "pos": (2, 5)},
{"tweet_id": <some-other-tweet-id>, "pos": (9, 12)}]
"turkish": [{"tweet_id": <some-tweet-id>, "pos": (5, 11)}]
}
}
我试图创建使用下面的代码(失败)指标:
db.tweet_words.create_index([("words.$**", pymongo.TEXT)])
要么
db.tweet_words.create_index([("words", pymongo.HASHED)])
像我有错误add index fails, too many indexes for twitter.tweet_words
或key too large to index
。 有没有办法使用索引来做到这一点? 还是应该改变我的方法的问题(也许重新设计DB)?