Как вы возвращаете дочерние объекты Solr и объекты внуков вместе с родителем? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь запросить 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. Что мне нужно, даже возможно? Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...