【问题标题】:How to nest documents in Solr?如何在 Solr 中嵌套文档?
【发布时间】:2018-07-26 01:17:33
【问题描述】:

在 solr 6.6.0 中,我想对特定键使用嵌套对象。

假设,我有一份文件如下:

{
    "ID": "16_nl",
    "countryIso": "AUS",
    "regionId": 30,
    "name": "test",
    "placeId": 50,
    "eventID": 100,
    "facilities": [12],
    "created": "2017-11-30T11:00:36.717Z",
    "modified": "2017-11-30T11:00:36.717Z"
}

但是现在,我想在上面的文档中添加子文档,键为“proposal”,如下所示

{
    "ID": "16_nl",
    "countryIso": "AUS",
    "regionId": 30,
    "name": "test",
    "placeId": 50,
    "eventID": 100,
    "facilities": [12],
    "proposal": [{      
        "duration": 55,
        "price" : 300,
        "status":"VISIBLE"  
    }],
    "created": "2017-11-30T11:00:36.717Z",
    "modified": "2017-11-30T11:00:36.717Z"
}

如何在 Solr 中做到这一点?

我浏览了http://yonik.com/solr-nested-objects/ 和其他文档,我有以下顾虑

  1. 我不知道我们应该如何将子文档映射到“提案”键?
  2. 我认为,“ID”、“countryIso”、“regionId”等字段在父文档中定义为必填,那么在子文档中是否也需要使用这些字段?

【问题讨论】:

    标签: solr solr6 nested-documents


    【解决方案1】:

    您必须在特殊键“_childDocuments_”下列出子文档。在 Apache Solr 参考指南中,您将找到此示例和提示“注意特殊的 _childDocuments_ 键需要指示 JSON 中的嵌套文档”:

    {
        "id": "1",
        "title": "Solr adds block join support",
        "content_type": "parentDocument",
        "_childDocuments_": [{
            "id": "2",
            "comments": "SolrCloud supports it too!"
        }]
    }
    

    注意子文档也必须具有的 id 字段。

    然后使用 Block Join Children Query Parser 通过父属性查找子对象,使用 Block Join Parent Query Parser 通过子属性查找父对象。见https://lucene.apache.org/solr/guide/6_6/other-parsers.html#OtherParsers-BlockJoinQueryParsers

    【讨论】:

    • 也可以方便地在子节点处添加一个新字段,例如:“content_type:”childDocument”,用于过滤目的。
    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2020-11-04
    相关资源
    最近更新 更多