gpt4 book ai didi

python - 如何在 PyMongo 中索引已知字段的未知字段?

转载 作者:行者123 更新时间:2023-12-01 08:31:43 24 4
gpt4 key购买 nike

我试图在数百万条推文中找到独特的单词,并且我想保留每个单词出现的位置。除此之外,我还按词首字母对单词进行分组。这是示例代码:

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)])

我遇到了诸如添加索引失败、twitter.tweet_words 索引过多 key 太大而无法索引 之类的错误。有没有办法用索引来做到这一点?或者应该改变我的方法来解决问题(也许重新设计数据库)?

最佳答案

要建立索引,您需要将动态数据保存在对象的值中,而不是键中。因此,我建议您重新设计您的架构,使其看起来像:

{
initial: "t"
count: 3,
words: [
{value: "the", tweets: [{"tweet_id": <some-tweet-id>, "pos": (2, 5)},
{"tweet_id": <some-other-tweet-id>, "pos": (9, 12)}]},
{value: "turkish", tweets: [{"tweet_id": <some-tweet-id>, "pos": (5, 11)}]}
]
}

然后您可以将其索引为:

db.tweet_words.create_index([("words.value", pymongo.TEXT)])

关于python - 如何在 PyMongo 中索引已知字段的未知字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53892553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com