Я пытаюсь запросить Solr 8.1.1 (используя интерфейс скорости (http://localhost:8983/solr/#/{core_name}/query), пока ничего особенного) и мне нужно вернуть родителя (Product), потомка (Module) и внука (Exercise) при запросе родительские документы как один объект, а не как единый список документов.
Я импортировал свой индекс, используя DIH, как показано ниже. Отладочные выходные данные для импорта DIH показывают поле childDocuments и структуру, которую я ожидал, но запрос индекса возвращает только плоскую структуру.
Большинство источников предлагают мне добавить fl=*,[child]
или fl=*,[child childFilter=Depth:1]
или [child parentFilter=Depth:0 childFilter=Depth:1]
(который, я уверен, в любом случае возвращает только один дополнительный уровень) к моему URL или полю fl в пользовательском интерфейсе, но это, по-видимому, не имеет никакого эффекта .
Моя конфигурация DIH выглядит следующим образом:
<document name="productDocument">
<entity name="Product" query="SELECT p.*, '0' AS Depth FROM Solr.Product p">
<field column="ProductId" name="ProductId" />
<field column="Description" name="Description" />
<field column="ProductCode" name="ProductCode" />
<field column="ProductType" name="ProductType" />
<field column="ProductLevel" name="ProductLevel" />
<field column="LearningTime" name="LearningTime" />
<field column="Vendor" name="Vendor" />
<field column="Introduction" name="Introduction" />
<field column="ReleasedDate" name="ReleasedDate" />
<field column="MarketingRank" name="MarketingRank" />
<field column="Price" name="Price" />
<field column="Depth" name="Depth"/>
<field column="QuestionCount" name="QuestionCount"/>
<field column="PassMark" name="PassMark"/>
<field column="IsActive" name="IsActive"/>
<entity child="true" name="Module" query="SELECT m.*, '1' AS Depth FROM Solr.Module m WHERE m.ProductId='${Product.ProductId}'">
<field column="ModuleId" name="ModuleId" />
<field column="ProductId" name="ProductId" />
<field column="Description" name="Description" />
<field column="LearningTime" name="LearningTime" />
<field column="Depth" name="Depth"/>
<field column="Order" name="Order"/>
<field column="IsActive" name="IsActive"/>
<entity child="true" name="Exercise" query="SELECT e.*, '2' AS Depth, '${Product.ProductId}' AS ProductId FROM Solr.Exercise e WHERE e.ModuleId='${Module.ModuleId}'">
<field column="ExerciseId" name="ExerciseId" />
<field column="ModuleId" name="ModuleId" />
<field column="ProductId" name="ProductId" />
<field column="Description" name="Description" />
<field column="Depth" name="Depth"/>
<field column="Order" name="Order"/>
<field column="IsActive" name="IsActive"/>
</entity>
</entity>
</entity>
</document>
Соответствующий раздел из управляемой схемы выглядит следующим образом:
<field name="ProductId" type="string" indexed="true" stored="true" multiValued="false" />
<!-- docValues are enabled by default for long type so we don't need to index the version field -->
<field name="_version_" type="plong" indexed="false" stored="false"/>
<!-- If you don't use child/nested documents, then you should remove the next two fields: -->
<!-- for nested documents (minimal; points to root document) -->
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<!-- for nested documents (relationship tracking) -->
<field name="_nest_path_" type="_nest_path_" /><fieldType name="_nest_path_" class="solr.NestPathField" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<!-- Product / Root -->
<field name="Description" type="text_general" indexed="true" stored="true" multiValued="false" required="false" />
<field name="ProductCode" type="text_general" indexed="true" stored="true" multiValued="false" required="false" />
<field name="ProductType" type="pint" indexed="true" stored="true" multiValued="false" required="false" />
<field name="ProductLevel" type="text_general" indexed="true" stored="true" multiValued="false" required="false" />
<field name="LearningTime" type="pint" indexed="true" stored="true" multiValued="false" required="false" />
<field name="Vendor" type="string" indexed="true" stored="true" multiValued="false" required="false" />
<field name="Introduction" type="text_general" indexed="true" stored="true" multiValued="false" required="false" />
<field name="ReleasedDate" type="pdate" indexed="true" stored="true" multiValued="false" required="false" />
<field name="MarketingRank" type="pint" indexed="true" stored="true" multiValued="false" required="false" />
<field name="Price" type="pfloat" indexed="true" stored="true" multiValued="false" required="false" />
<field name="Order" type="pint" indexed="true" stored="true" multiValued="false" />
<field name="QuestionCount" type="pint" indexed="true" stored="true" multiValued="false" required="false" />
<field name="PassMark" type="pint" indexed="true" stored="true" multiValued="false" required="false" />
<field name="IsActive" type="boolean" indexed="true" stored="true" multiValued="false" required="false" />
Я ожидаю, что выходные данные запроса будут соответствовать выходным данным отладки DIH и структуре DIH. Что мне нужно, даже возможно? Любая помощь приветствуется.