Solr 嵌套文档:查询由 parent 字段过滤的 child 文档

Solr nested documents : Query for child documents filtered by a parent field

我有以下 parent-child 个模型

parent:

public class DataSet {
    @Field
    private String id;
    @Field
    private String type="type_dataset";
    @Field
    private String name;

    @Field
    private String dataSourceId;

    @Field
    private String serviceId;

    @Field(child=true)
    private List<DataSetColumn> columns;
}

child:

 public class DataSetColumn {
        @Field
        private String id;
        @Field
        private String name;
        @Field
        private String type="type_column";  
    }

我可以查询按属于 parent 的字段过滤的 parent 文档:

http://solrserver:8886/solr/BeanTest10/select?q=*:*&fq=(type:type_dataset)&fl=*,[child
parentFilter=type:type_dataset]&wt=json&indent=true

现在我想:

  1. 查询 "DataSetColumns"(child 文档)按 serviceId(parent 字段)过滤
  2. 还有 return "dataSourceId" 是响应 (DataSet)
  3. 中 parent 中的一个字段

我怎样才能做到这一点?

是的,你可以通过 BlockJoinParentQueryParser 的力量实现这样的目标。

基本语法如下 - q={!parent which=<allParents>}<someChildren>

在您的情况下,它可以转换为类似 - +{!parent which="type:type_dataset"}name:random* +service_id:1

return 子文档的技巧相同 (child doc transformer):

fl=data_id,[child parentFilter=type:type_dataset]

如果需要,您也可以通过 fl 构造来限制子字段。