Atlas 搜索对象数组

问题描述

我有以下架构:

{
   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"
          }
        }
      }
    }
  }
}

相关问答

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