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所示:
| 归档时间: |
|
| 查看次数: |
5134 次 |
| 最近记录: |