【问题标题】:PyMongo Atlas Search not returning anythingPyMongo Atlas Search 不返回任何内容
【发布时间】:2021-03-14 22:36:28
【问题描述】:

我正在尝试使用 Atlas for MongoDB 进行全文搜索。我正在通过 Python 中的 PyMongo 驱动程序执行此操作。我正在使用聚合管道,并执行 $search 但它似乎没有返回任何内容。

cursor = db.collection.aggregate([ { "$search": {"text": { "query": "hello", "path": "text_here"} } }, {"$project": {"file_name": 1} } ])

for x in cursor:

    print(x)

我试图用这段代码实现的是搜索集合中名为“text_here”的字段,我正在搜索术语“hello”并返回包含该术语的所有结果并列出它们通过他们的“文件名”。但是,它什么也没返回,我很困惑,因为这与文档网站上的示例代码几乎相同。我现在唯一能想到的是路径可能不正确并且它无法访问我指定的字段。此外,这段代码没有返回任何错误,只是没有返回任何内容,正如我通过游标循环测试的那样。

【问题讨论】:

  • Atlas 搜索会更快更好。只是一个事实。如果不是默认值,请不要忘记包含您的索引名称。如果您需要,这里有一个很棒的 Python 示例:github.com/MarcusSorealheis/Flask_Tuts
  • 这里的问题看起来你可能没有创建搜索索引。

标签: python mongodb pymongo mongodb-atlas


【解决方案1】:

我有同样的问题。我还通过在查询中传递索引的名称来解决它。例如:

{ 
  index: "name_of_the_index",
  text: {
    query: 'john doe',
    path: 'name'
  }
}

我按照教程进行操作,但如果不指定“索引”名称,则无法返回任何结果。我希望这在文档中被提及为强制性的。

【讨论】:

  • 如此真实,我不敢相信它不在文档中。
【解决方案2】:

如果您只是进行查找和项目,则不需要聚合查询,只需 find()。你想要的语法是:

db.collection.find({'$text': {'$search': 'hello'}}, {'file_name': 1})

使用聚合等效:

cursor = db.collection.aggregate([
    {'$match': {'$text': {'$search': 'hello'}}},
    {'$project': {'file_name': 1}}])

工作示例:

from pymongo import MongoClient, TEXT

db = MongoClient()['mydatabase']

db.collection.create_index([('text_here', TEXT)])
db.collection.insert_one({"text_here": "hello, is it me you're looking for", "file_name": "foo.bar"})

cursor = db.collection.find({'$text': {'$search': 'hello'}}, {'file_name': 1})

for item in cursor:
    print(item)

打印:

{'_id': ObjectId('5fc81ce9a4a46710459de610'), 'file_name': 'foo.bar'}

【讨论】:

  • 好吧,您可以采用相同的语法并将其放入聚合查询中。我已经编辑了我的答案来举个例子。
  • 知道了,这似乎确实有效,但使用这种格式,你怎么能做布尔查询,比如“与”两个搜索一起?我找到了一种使用双引号的方法,但我似乎找不到它的命令。
  • $match 查询是通过添加额外的过滤条件来“与”运算的,例如{'$match': {'$text': {'$search': 'hello'}, "file_name": "foo.bar"}}
  • 是的,我似乎能够以这种方式解决它,但是有没有办法像这个例子一样完成它? docs.atlas.mongodb.com/reference/atlas-search/queryString 。当您能够在查询中看到“AND”和“OR”时,它更具可读性。非常感谢。
  • 不知道 - 没用过。
猜你喜欢
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 2020-04-27
  • 2019-04-06
  • 2012-02-15
  • 2020-09-07
  • 2021-11-22
  • 2015-11-06
相关资源
最近更新 更多