MongoDB Atlas 文本索引自动完成无法匹配

nrm*_*mad 4 mongodb mongodb-atlas

我在我的一个数据库集合上创建了一个文本索引,每个数据库集合都设置了自动完成功能。我索引的集合字段是名字、姓氏和电子邮件。以下是我用来创建文本索引的内容。它成功了:

 {
 "mappings": {
"dynamic": false,
"fields": {
  "email": [
    {
      "foldDiacritics": false,
      "maxGrams": 7,
      "minGrams": 3,
      "tokenization": "edgeGram",
      "type": "autocomplete"
    }
  ],
  "firstname": [
    {
      "foldDiacritics": false,
      "maxGrams": 7,
      "minGrams": 3,
      "tokenization": "edgeGram",
      "type": "autocomplete"
    }
  ],
  "surname": [
    {
      "foldDiacritics": false,
      "maxGrams": 7,
      "minGrams": 3,
      "tokenization": "edgeGram",
      "type": "autocomplete"
    }
  ]
}
}
}
Run Code Online (Sandbox Code Playgroud)

当我在 mongoDB shell 中运行以下查询时,我没有收到错误,但当姓氏字段与查询完全匹配时也没有结果:

db.users.aggregate([ { "$search": { "autocomplete": 
{ "query": "janson","path": "surname", "fuzzy": 
{ "maxEdits": 2, "prefixLength": 3 } } } }])
Run Code Online (Sandbox Code Playgroud)

我还尝试了索引中的所有三个集合字段:

db.users.aggregate([ { "$search": { "autocomplete": 
{ "query": "janson","path": ["firstname","surname", "email"], "fuzzy": 
{ "maxEdits": 2, "prefixLength": 3 } } } }])
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

“由 mongot :: 引起的远程错误 :: “路径”必须是字符串(来自“自动完成”)”,

我不明白我的索引定义有什么问题,因为它是由图集验证的并且存在于服务器上。可能是什么问题呢?

谢谢

编辑

一个简化的查询:

db.groups.aggregate([ { "$search": { "autocomplete": { "query": "test", "path": "title" } } }])
Run Code Online (Sandbox Code Playgroud)

Atlas索引规范:

{
  "mappings": {
    "dynamic": false,
    "fields": {
      "title": [
        {
          "foldDiacritics": false,
          "maxGrams": 7,
          "minGrams": 3,
          "tokenization": "edgeGram",
          "type": "autocomplete"
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Atlas 声称 100% 索引的简单文档:

{
    "_id": {
        "$oid": "5f773d551dd78dfa97219ae2"
    },
    "title": "test"
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 12

如果使用非默认索引,则需要指定索引名称:

db.users.aggregate([ { 
    "$search": {
        "index": "<REPLACE_WITH_INDEX_NAME>", 
        "autocomplete": { 
            "query": "janson",
            "path": "surname", 
            "fuzzy": { 
                "maxEdits": 2, 
                "prefixLength": 3 
            } 
         } 
    } 
}])
Run Code Online (Sandbox Code Playgroud)

<REPLACE_WITH_INDEX_NAME>如下图SearchIndex1所示:

索引名称