LoopbackJS上的变音符号不敏感搜索

时间:2016-09-19 14:37:37

标签: mongodb loopbackjs strongloop

此问题涉及:Diacritic Case-Insensitive search Loopback

我尝试添加以下索引 - 我的firstname模型的lastnameNsUser,如@Markus_W_Mahlberg建议的 - 环回方式。

    {
      "name": "NsUser",
      "base": "User",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "indexes": {
        "firstname": "text" ,
        "lastname": "text"
      },
      "properties": {
        "firstname": {
          "type": "string"
        },
       "lastname": {
          "type": "string"
        }
       …
     }
     …
    }

我还在server.js中使用自动更新脚本,以确保索引的工作方式如下所示:https://github.com/strongloop/loopback-connector-mongodb/issues/103

我的MongoDB shell版本是:3.2.3

仍然没有用。有什么想法吗?

修改 要回答Pawan - 当我使用以下方式在Mongo中显示我的索引时

> db.NsUser.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "needsporty_DB.NsUser"
    },
    {
        "v" : 1,
        "key" : {
            "text" : 1
        },
        "name" : "firstname",
        "ns" : "needsporty_DB.NsUser"
    },
    {
        "v" : 1,
        "key" : {
            "_fts" : "text",
            "_ftsx" : 1
        },
        "name" : "diatrics_insensitive_keys",
        "ns" : "needsporty_DB.NsUser",
        "weights" : {
            "firstname" : 1,
            "lastname" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
    }
]

1 个答案:

答案 0 :(得分:2)

在model.json文件中声明索引的语法是

"indexes": {
     //A composite index two keys: key1 in ascending order and key2 in descending order
     "<indexName>": { "<key1>": 1, "<key2>" : -1 }
    //single field index
    "<indexName>": { "<key1>" : 1 }
   // for text indexes
   "<indexName>": { "<key1>" : "text" }   
}

检查docs

因此,相应地更改索引对象,因为一个集合最多可以有one text index,所以在这里你需要创建一个带有firstname和lastname的复合文本索引,即

"indexes": {
    "textSearchName" : { "firstname" : "text", "lastname" : "text" }
}