Solr вложенные документы: запрос дочерних документов, отфильтрованных по родительскому полю - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть следующие модели родитель-потомок

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 как:

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

Теперь я хочу:

  1. Запрос для «DataSetColumns» (дочерних документов), отфильтрованных по serviceId (родительское поле)
  2. также возвращает«dataSourceId», который является полем в ответе родителя (DataSet)

Как мне этого добиться?

1 Ответ

0 голосов
/ 28 декабря 2018

Да, вы можете достичь чего-то подобного с помощью BlockJoinParentQueryParser .

Основной синтаксис следующий - q={!parent which=<allParents>}<someChildren>

В вашем случае это может бытьпреобразован во что-то вроде - +{!parent which="type:type_dataset"}name:random* +service_id:1

Трюк для возврата дочерних документов будет таким же ( дочерний преобразователь документов ):

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

При необходимости вы можете ограничитьдочерние поля также с помощью fl конструкции.

...