mongodb - 子文档数组上的 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 的文档说明如下: 自动完成类型不能用于索引其值为字符串数组的字段。所以要么这句话要改成说各种数组,要么我这里做错了。有人可以澄清这是否可能吗?提前致谢
解决方案
你的语法完全错误。它会像:
{
"mappings": {
"dynamic": false,
"fields": {
"data.equipment.entries.name": [
{
"type": "autocomplete",
"tokenization": "nGram",
"minGrams": 3,
"maxGrams": 7,
}
]
}
}
}
但我不确定,如果它支持文档数组,但如果你的问题解决了,请告诉我。
推荐阅读
- docker - 在 docker:dind 中运行 docker-compose
- python - 有没有办法在kivy中生成多个按钮?
- php - Symfony 框架无法使用自制安装的 php
- node.js - 在 Uppy 上使用 Instagram 登录后出现 401 未授权
- amazon-web-services - 使用 AWS CloudWatch Insights 按字段值聚合日志并绘制为多个系列
- date - 日期转换 (Excel 2016) - 数据透视表
- c# - 在 foreach 循环中将项目添加到 ObservableCollection 会影响上级列表中的整个项目?
- python-3.x - 在 python 3.6 上运行 tabula.read_pdf() 函数时获取“CalledProcessError ....返回非零退出状态 1”
- django - 如何从 django 的 background_tasks 导入背景。方法给出错误
- python - 属于一个类的变量定义