具有自动完成功能的MongoDB Atlas文本索引不匹配

问题描述

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

 {
 "mappings": {
"dynamic": false,"fields": {
  "email": [
    {
      "foldDiacritics": false,"maxGrams": 7,"minGrams": 3,"tokenization": "edgeGram","type": "autocomplete"
    }
  ],"firstname": [
    {
      "foldDiacritics": false,"surname": [
    {
      "foldDiacritics": false,"type": "autocomplete"
    }
  ]
}
}
}

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

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

我也尝试使用索引中的所有三个收集字段:

db.users.aggregate([ { "$search": { "autocomplete": 
{ "query": "janson","path": ["firstname","surname","email"],"prefixLength": 3 } } } }])

这给了我以下错误

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

我看不到索引定义有什么问题,因为它已由Atlas验证并存在于服务器上。可能是什么问题?

谢谢

编辑

简化查询

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

Atlas索引规范:

{
  "mappings": {
    "dynamic": false,"fields": {
      "title": [
        {
          "foldDiacritics": false,"type": "autocomplete"
        }
      ]
    }
  }
}

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

{
    "_id": {
        "$oid": "5f773d551dd78dfa97219ae2"
    },"title": "test"
}

解决方法

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

DispatchLuis

下图中的db.users.aggregate([ { "$search": { "index": "<REPLACE_WITH_INDEX_NAME>","autocomplete": { "query": "janson","path": "surname","fuzzy": { "maxEdits": 2,"prefixLength": 3 } } } }]) <REPLACE_WITH_INDEX_NAME>

index name

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...