【问题标题】:Pymongo how to use full text searchPymongo如何使用全文搜索
【发布时间】:2018-01-21 19:50:09
【问题描述】:

我希望使用 pymongo 在我的 python 应用程序中实现全文搜索。我一直在查看this question,但由于某种原因,我无法在我的项目中实现这一点,因为我收到了一个错误no such cmd: text。谁能指导我做错了什么?

这是我的代码:

db = client.test
collection = db.videos
def search_for_videos(self, search_text)
    self.db.command("text", "videos", 
            search=search_text, 
            limit=10)

我尝试搜索的集合名为videos,但我不确定我是否将其放入正确的参数中,我也不确定是否需要project={"name": 1, "_id": 0} 行。

文档here 我相信是使用 mongo shell 来执行命令,但是我希望在我的代码中执行这个操作。

我已经研究过使用db.videos.find() 函数,但似乎也无法正确实现它。

如何在我的 Python 代码中使用 PyMongo 全文搜索?

【问题讨论】:

  • 另请注意,您必须在 Pymongo 中编写 "_id": False,而不是在普通 MongoDB 中编写 "_id": 0

标签: python mongodb pymongo


【解决方案1】:

首先确保您在字段上创建了一个文本索引,如提到的 here 或者您也可以使用 pymongo 来完成:

collection.create_index([('your field', 'text')])

使用 pymongo 你可以这样做来搜索:

collection.find({"$text": {"$search": your search}})

你的函数应该是这样的:

def search_for_videos(search_text):
    collection.find({"$text": {"$search": search_text}}).limit(10)

希望对你有帮助。

【讨论】:

  • 非常感谢!这就是我一直在寻找的东西?
【解决方案2】:

首先根据您要搜索的字段创建一个文本索引。

从 pymongo 导入文本

db = MongoClient('localhost',port = 27017).DBNAME

db.collection.create_index([('FIELD_NAME',TEXT)],default_language ="english")

创建文本索引后,使用以下查询搜索文本。根据数据库的大小,创建文本索引可能需要很长时间。

db.collection.find({"$text": {"$search": 你的搜索}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多