Solr嵌套文档:查询由父字段过滤的子文档

时间:2018-12-03 04:54:58

标签: solr lucene solrj solr-query-syntax

我有以下亲子模型

父母:

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;
}

孩子:

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

我可以查询由属于父级的字段过滤的父级文档,

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

现在我要:

  1. 查询通过serviceId(父字段)过滤的“ DataSetColumns”(子文档)
  2. 还返回“ dataSourceId”,它是响应(DataSet)中父级中的一个字段

我该如何实现?

1 个答案:

答案 0 :(得分:1)

是的,借助BlockJoinParentQueryParser的强大功能,您可以实现类似的目的。

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

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

返回子文档的技巧是相同的(child doc transformer):

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

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