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表达式与需要不同类型特殊索引的查询运算符组合使用。例如,不能将$text表达式与$near运算符组合

    它还应该说“您不能将
    $或
    $text
    表达式或
    $near
    运算符一起使用,两者都在多个条件下使用。”但是这一小部分信息丢失了,但您仍然不能这样做

    您的语法通常不正确,但即使在受支持的MongoDB版本中使用正确的语法,您在尝试使用
    $或
    时也会出现如下错误:

    Error: error: {
        "$err" : "Can't canonicalize query: BadValue Too many text expressions",
        "code" : 17287
    }
    
    因此,要解决此问题,您需要:

  • 拥有支持
    $text
    语法(或与命令表单一起使用)的2.6或更高版本MongoDB服务器

  • 在多个字段上建立索引并使用单个索引

  • 执行“单独查询”以代替“或”条件,并在客户端API界面中“组合”结果


  • 这是使用MongoDB文本搜索获得类似“或”条件的唯一方法。

    首先,我认为您不能以这种方式使用
    $text
    ,您需要首先在集合上创建一个文本索引,然后您可以使用它,但不指定任何字段,因为它对索引而不是字段起作用

    请检查这里: