Node.js 如何使用";进行多文本搜索$文本查询和$or";在猫鼬/猫鼬中?
这是一个“类”模型,我为它创建了“关键字”、“生活区”、“类型”的“文本”索引 模型的结构:Node.js 如何使用";进行多文本搜索$文本查询和$or";在猫鼬/猫鼬中?,node.js,mongodb,mongoose,fulltext-index,Node.js,Mongodb,Mongoose,Fulltext Index,这是一个“类”模型,我为它创建了“关键字”、“生活区”、“类型”的“文本”索引 模型的结构: { "_id" : ObjectId("558cf6e3387419850d892712"), "keywords" : "rama,seetha", "lifeArea" : [ "Emotional Wellness" ], "type" : "Pre Recorded Class", "description" : "ram desc
{
"_id" : ObjectId("558cf6e3387419850d892712"),
"keywords" : "rama,seetha",
"lifeArea" : [
"Emotional Wellness"
],
"type" : "Pre Recorded Class",
"description" : "ram description",
"synopsis" : "ram syn",
"name" : "ram demo",
"__v" : 0
}
db.Class.getIndexes()
// displaying index
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "classIndex",
"ns" : "innrme.classes",
"weights" : {
"keywords" : 1,
"lifeArea" : 1,
"type" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 2
}
我想对上面提到的字段进行文本搜索。我尝试了以下查询
db.classes.find({$or:[{keywords: { $text: { $search: "rama abc" } } }, {type: {$text: { $search: "class" }}}],score: {$meta: 'textScore'}});
但它不起作用,我得到了以下错误
Error: error: {
"$err" : "Can't canonicalize query: BadValue unknown operator: $text",
"code" : 17287
}
请帮助我获得正确的查询。
如果我在提问或解释问题时出错,请纠正/教育我。实际错误表明您的mongodb版本低于2.6(因此没有以这种方式进行文本搜索)。但是你无论如何不能这么做,原因有二
$或
表达式只能有一个特殊索引表达式,在参数中为“文本”或“地理空间”$或与$text
表达式或$near
运算符一起使用,两者都在多个条件下使用。”但是这一小部分信息丢失了,但您仍然不能这样做
您的语法通常不正确,但即使在受支持的MongoDB版本中使用正确的语法,您在尝试使用$或时也会出现如下错误:
Error: error: {
"$err" : "Can't canonicalize query: BadValue Too many text expressions",
"code" : 17287
}
因此,要解决此问题,您需要:
拥有支持$text
语法(或与命令表单一起使用)的2.6或更高版本MongoDB服务器
在多个字段上建立索引并使用单个索引
执行“单独查询”以代替“或”条件,并在客户端API界面中“组合”结果
这是使用MongoDB文本搜索获得类似“或”条件的唯一方法。首先,我认为您不能以这种方式使用$text
,您需要首先在集合上创建一个文本索引,然后您可以使用它,但不指定任何字段,因为它对索引而不是字段起作用
请检查这里: