有没有办法改进MongoDB';s的全文搜索性能?

有没有办法改进MongoDB';s的全文搜索性能?,mongodb,mongodb-query,full-text-search,Mongodb,Mongodb Query,Full Text Search,我正在使用MongoDB Atlas为我的~110k运动员数据提供服务 每个文档都包含一个name字段和一个name\u foreign字段,该字段的名称使用的是MongoDB全文搜索不支持的其他语言。 在我的Python应用程序中,我使用Pymongo返回基于玩家姓名的搜索结果(英语和外语)。我创建了一个索引,以便根据搜索查询对搜索结果进行评分 db.players.创建索引([(“名称”,文本),(“名称”,文本)]) 在我的Python应用程序中,我检测输入字符串,并且每当它是另一种语言时

我正在使用MongoDB Atlas为我的~110k运动员数据提供服务

每个文档都包含一个
name
字段和一个
name\u foreign
字段,该字段的名称使用的是MongoDB全文搜索不支持的其他语言。 在我的Python应用程序中,我使用Pymongo返回基于玩家姓名的搜索结果(英语和外语)。我创建了一个索引,以便根据搜索查询对搜索结果进行评分

db.players.创建索引([(“名称”,文本),(“名称”,文本)])

在我的Python应用程序中,我检测输入字符串,并且每当它是另一种语言时,我标记该字符串,然后将其输入到
find
查询中(数据库中的
name\u foreign
字段已经标记,以便全文搜索工作)

我的球员终点站 我最终返回搜索结果的前4名。 这适用于英语,全文搜索也适用于英语。然而,当我使用另一种语言时,它可以很好地用于短名称,但是当名称变得稍长时,它崩溃,给我一个内存泄漏错误

2019-11-28T21:51:47.301318+00:00 heroku[web.1]: Process running mem=799M(156.2%)
2019-11-28T21:51:47.301318+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
当数据低于10k时,该方法效果良好。现在它有大约11万美元,看来我需要一个更好的方法来做

我对这类东西还不熟悉,我真的很想听听有经验的MongoDB用户的想法,最终让它工作得更好


提前谢谢

为了减少您正在使用的内存,您可以让mongo为您进行排序,然后获得前4个结果。这样,您就不会将所有结果加载到内存中,对它们进行排序,并且只使用前4个

来自bson导入子
cur=collection.aggregate([
{
“$match”:{
“$text”:{
$search:“foo”
}
}
},
{
“$addFields”:{
“textScore”:{“$meta”:“textScore”}
}
},
{#最佳得分和最高声誉:
“$sort”:SON([((“textScore”,-1),(“声誉”,-1)])#必须使用SON而不是dict,因为排序的顺序在这里很重要
},
{
“$限额”:4
}   
])
列表(cur)#从排序中获取前4名结果

Mongo在排序之后有一个特殊的限制阶段。您实际上不需要对110k个文档进行排序来选择4个文档,因此这也比您这边的操作要快得多。

在for循环中尝试执行的操作并不十分清楚,但我建议您在将其传递给mongo之前查看
query
的值,只是为了确保你没有把空间放错地方。
2019-11-28T21:51:47.301318+00:00 heroku[web.1]: Process running mem=799M(156.2%)
2019-11-28T21:51:47.301318+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)