Json 出于某种原因,我在mongodb中的关键字搜索只针对一个关键字,而不针对另一个关键字,如何修复此错误?

Json 出于某种原因,我在mongodb中的关键字搜索只针对一个关键字,而不针对另一个关键字,如何修复此错误?,json,mongodb,attributes,word-frequency,keyword-search,Json,Mongodb,Attributes,Word Frequency,Keyword Search,我从Yelp的dataset挑战中导入了5个巨大的json文件数据到Ubuntu上的mongodb中。这5个文件包含许多记录。我想在MySQL或其他结构化查询语言中搜索,这样我就可以在“文本”下搜索关键字“UFC”,在“属性”下搜索“酒精:full_bar”,并返回它们的计数,至少返回一个。我还想看看提到UFC和MMA的酒吧是否比其他没有提到这些东西的酒吧得到更多的评论、签到和提示。我觉得这需要包含business_id变量。使问题更加复杂的是,“tips.json”还使用变量名“text”,比

我从Yelp的dataset挑战中导入了5个巨大的json文件数据到Ubuntu上的mongodb中。这5个文件包含许多记录。我想在MySQL或其他结构化查询语言中搜索,这样我就可以在“文本”下搜索关键字“UFC”,在“属性”下搜索“酒精:full_bar”,并返回它们的计数,至少返回一个。我还想看看提到UFC和MMA的酒吧是否比其他没有提到这些东西的酒吧得到更多的评论、签到和提示。我觉得这需要包含business_id变量。使问题更加复杂的是,“tips.json”还使用变量名“text”,比如reviews.json

我已在mongodb数据库中成功构建了此索引:

> db.collection.createIndex({"text":"text", "attributes": "text"})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}
搜索关键字UFC的我的命令有效:

> db.collection.find({"$text": {"$search": "UFC"}})
{ "_id" : ObjectId("58fd4601051d56ff58e471f2"), "review_id" : "ogdaaLlAhmcyW1ZpGsiEGA", "user_id" : "rNbOmPzfWD1D4V8WOo7lBQ", "business_id" : "AVqjAx6j4HAvUb8t3_lv8Q", "stars" : 4, "date" : "2015-03-29", "text" : "We came here to watch the UFC.  We had fries and wings, and they did not disappoint.\nWe opted to sit in the upstairs area where it was less crowded, and less noisy.\nThe waitress was a total dummy, but her niceness kind of made up for it....\nIf she had an attitude, she would have received zero tip.", "useful" : 0, "funny" : 0, "cool" : 0, "type" : "review" }

......
但是,当我试图在属性下查找alchhol:full_bar时,出现以下错误:

> db.collection.find({"$attributes": {"$search": "Alcohol: full_bar"}})
error: {
    "$err" : "Can't canonicalize query: BadValue unknown top level operator: $attributes",
    "code" : 17287
}
> 

您的查询语法错误;您没有指定要搜索的字段名,而是指定(使用特殊术语)搜索应通过文本索引进行,这意味着它将同时搜索“文本”和“属性”字段

因此,当您运行此查询时:

db.collection.find({"$text": {"$search": "UFC"}})
这不仅限于“文本”字段;它还搜索整个文本索引,其中包括“文本”和“属性”字段

因此,如果要在“属性”字段中搜索某些文本,可以使用相同的方法构造查询:

db.collection.find({"$text": {"$search": "Alcohol: full_bar"}})

谢谢你,先生,那么我该如何写查询呢?我只想在“文本”下找到关键字“UFC”?你能写下你的答案吗?我的意思是我想运行两个查询,一个是只在文本中找到UFC,另一个是在属性中找到酒精:full_bar。嘿,先生,你在吗?