首页 > 解决方案 > 子文档数组上的 Atlas 搜索自动完成

问题描述

尝试为文档中的子文档数组定义索引时,我在使用自动完成图集搜索数据类型时遇到了一些问题。

我的集合中文档的数据结构如下所示:

{
   "data": {
     "equipment": {
       "entries": [
         {
           "name": "abcdefg"
         }
         {
           "name": "hijklmno"
         }
       ]
     }
   }
}

当我定义用于搜索entries数组的字符串索引时,它按预期工作并且我得到了合乎逻辑的结果。这是我使用 lucene.keyword 分析器的索引定义:

{
  "mappings": {
    "dynamic": false,
    "fields": {
      "data": {
        "fields": {
          "equipment": {
            "fields": {
              "entries": {
                "fields": {
                  "name": {
                    "analyzer": "lucene.keyword",
                    "searchAnalyzer": "lucene.keyword",
                    "type": "string"
                  }
                },
                "type": "document"
              }
            },
            "type": "document"
          }
        },
        "type": "document"
      }
    }
  }
}

但是,当我使用自动完成类型尝试相同的操作时,我得到一个空结果,但没有错误。这是我定义自动完成的方式:

{
  "mappings": {
    "dynamic": false,
    "fields": {
      "data": {
        "fields": {
          "equipment": {
            "fields": {
              "entries": {
                "fields": {
                  "name": {
                    "tokenization": "nGram",
                    "type": "autocomplete"
                  }
                },
                "type": "document"
              }
            },
            "type": "document"
          }
        },
        "type": "document"
      }
    }
  }
}

Atlas Search 的文档说明如下: 自动完成类型不能用于索引其值为字符串数组的字段。所以要么这句话要改成说各种数组,要么我这里做错了。有人可以澄清这是否可能吗?提前致谢

标签: mongodbmongodb-atlasmongodb-atlas-search

解决方案


你的语法完全错误。它会像:

{
  "mappings": {
    "dynamic": false,
    "fields": {
      "data.equipment.entries.name": [
        {
          "type": "autocomplete",
          "tokenization": "nGram",
          "minGrams": 3,
          "maxGrams": 7,
        }
      ]
    }
  }
}

但我不确定,如果它支持文档数组,但如果你的问题解决了,请告诉我。


推荐阅读