过滤子文档并检索父+子文档

时间:2018-06-12 11:34:12

标签: solr

我的Solr服务器中有一个简单的文档:

{
    "id": 1,
    "type": "dad",
    "_childDocuments_": [
        {
            "id": 2,
            "name": "Alice"
        },
        {
            "id": 3,
            "name": "Bob"
        }
    ]
}

我想过滤此文档以仅检索" Alice"文档,以及父文档,不包括其他孩子," Bob"。

预期结果:

{
    "id": 1,
    "type": "dad",
    "_childDocuments_": [
        {
            "id": 2,
            "name": "Alice"
        }
    ]
}

为此,我使用以下查询:

q: name:Alice
fl: *, [child parentFilter=*:* limit=10]

问题是:此过滤器仅返回Alice子文档,而没有相应的父父文档。

如何修复此搜索?我已尝试使用parentFilter=type:dad,与建议的here一样,但此查询引发an error我无法理解:

  

父查询不得与父过滤器之外的任何文档匹配。将它们组合为必须(+)和必须不( - )子句来查找问题文档。的docID = 0

另外,如果我过滤:

q: type:dad name:Alice
fl: *, [child parentFilter=*:* limit=10]

我将收到两份文件:爸爸+爱丽丝,而不是一份带爸爸的文件 - >爱丽丝

1 个答案:

答案 0 :(得分:0)

您可以将childFilterparentFilter

一起使用
q= type:dad
fl= *, [child parentFilter=type:dad childFilter=name:Alice limit=10]

结果:

"response": {
    "numFound": 1,
    "start": 0,
    "docs": [
        {
            "id": "1",
            "type": ["dad"],
            "_version_": 1603065478506348544,
            "type_str": ["dad"],
            "_childDocuments_": [
                {
                    "id": "2",
                    "name": ["Alice"],
                    "_version_": 1603065478506348544,
                    "name_str": ["Alice"]
                }
            ]
        }
    ]
}