【问题标题】:How do I search for a phrase and a keyword at the same time in mongodb?如何在mongodb中同时搜索一个词组和一个关键字?
【发布时间】:2017-04-29 21:38:40
【问题描述】:

基本上,我正在浏览我的 mongodb 中的一个大型 yelp 数据库,我想找到所有带有短语 hotwings 和关键字折扣的评论。但我无法创建正确的查询来查找评论中包含短语 hotwings 和关键字折扣的评论。

为了给你一些背景知识,我将 yelp review 的几个大型 json 文件导入到我在 ubuntu 上的 mongodb 数据库中。我想在属性下的“文本”和“酒精:full_bar”下查找关键字“UFC”,并至少返回它们的计数。因为我想看看提到 UFC 和 MMA 的酒吧是否比其他酒吧获得更多评论、签到和提示,所以没有提到这些事情。

我已经在我的 mongodb 数据库中成功建立了这个索引:

> db.collection.createIndex({"text":"text", "attributes": "text"})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

这就是我所拥有的:

db.collection.find( { $text: { $search: "\"hot wings\" 'discount'" } } )

到目前为止,它只给了我带有热翅膀的评论,并在那里打折。有没有办法只显示包含短语 hotwing 和关键字折扣的评论?

有没有办法同时搜索多个短语和一个关键词?

【问题讨论】:

    标签: mongodb keyword-search match-phrase database


    【解决方案1】:

    这应该可行:

    db.collection.find({
    $and: [
        {'text': {'$regex': 'hot wings'} },
        {'text': {'$regex': 'discount'} }
    ]})
    

    您可以向 $and 数组添加更多短语。

    【讨论】:

    • 在本例中,您搜索的是实际字段,而不是添加到集合文本索引中的字段。
    • 我的意思是您不需要添加索引来运行您正在寻找的独家搜索,其中文本包含“热翅膀”和“折扣”。您可以运行我在您的集合中的特定字段上显示的正则表达式搜索。在您的情况下,您可以在文本或属性字段上运行它。 count 也适用于查询,只需在我提供的查询末尾添加“.count()”即可。
    • 你没有做错。这一切都取决于你想要什么。第一个查询在 $text 索引的所有字段中搜索“hotwings”,第二个查询仅在文本字段中搜索。看起来您将 text 和 attributes 字段都添加到了 $text 索引,所以它会给您更多的结果。
    • 嘿,乔,你稍后在吗?
    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2017-05-16
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多