问题描述
我有以下架构:
{
name: String,phones: [
{
number: String,type: String
}
]
}
如何索引 phones.number
以便我可以编写如下内容:
collection.aggregate([{
"$search":{
"compound":{
"should":[
{"autocomplete":{"query":"012345","path":"name"}},{"autocomplete":{"query":"012345","path":"phones.number"}}
]
}
}
}])
文档 here 给出了一个字符串数组的例子,而不是一个对象数组。
解决方法
根据this answer,支持通过数组中子文档的属性进行索引。只需通过 phones.number
创建一个索引。
有关详细信息,请参阅 the documentation。
编辑
我将标准索引与 Atlas 搜索的索引混淆了。从文档中,您应该能够以这种方式索引文档数组:
{
"analyzer":"lucene.standard","searchAnalyzer":"lucene.standard","mappings":{
"dynamic":false,"fields":{
"name":{
"type":"string","analyzer":"lucene.standard"
},"phones":{
"type":"document","fields":{
"number":{
"type":"string","analyzer":"lucene.standard"
},"type":{
"type":"string","analyzer":"lucene.standard"
}
}
}
}
}
}