SOLR巢状实体查询(Oracle SQL DIH)

drnojrws  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(186)

我想设置SOLR(8.5.2)方案,以便查询父实体并在同一结果中获取与之关联的所有子实体。例如:

{
  entityId: 1,
  entityName: "something"
  locations: [ ( <- nested entity)
   {
     locationId: 1,
     locationName: "something"
   },
   {
     locationId: 2,
     locationName "something"
   }
  ]
}

我已经成功地从具有嵌套实体的Oracle数据库导入了数据,下面是我的dataconfig.xml

<document name="entities">
    <entity name="entity"
            query="select * from LIC_ENTITIES" >
        <field column="ENT_ID" name="entityId"/>
        <field column="NOMBRE" name="entityName"/>

        <entity name="entity_locations" 
                child="true"
                query="select * from LIC_ENTITIES_LOCATIONS where ent_ent_id ='${entity.ENT_ID}'">
            <field column="LOC_ID" name="locationId"/>
            <field column="NOMBRE" name="locationName"/>        
        </entity>

    </entity>

  </document>

下面是schema.xml字段配置:

<!-- 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="true" docValues="false" />

    <!-- for nested documents (relationship tracking) -->
    <field name="_nest_path_" type="_nest_path_" indexed="true" stored="true"/>
    <fieldType name="_nest_path_" class="solr.NestPathField" />

    <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>

    <field name="entityId" type="pint" docValues="false" indexed="true" stored="true"/>
    <field name="entityName" type="string" docValues="false" indexed="true" stored="true"/>

    <field name="locationId" type="pint" docValues="false" indexed="true" stored="true"/>
    <field name="locationName" type="string" docValues="false" indexed="true" stored="true"/>

所有数据都已导入,我可以很好地查询它,但我无法同时查询父实体和获取子实体。
我已经尝试使用Child Transformer(例如[child parentFilter=entityId:274939]),但我得到以下错误:
嵌套架构时不应发送父筛选器
我尝试过使用块连接查询(例如,q={!parent which=“entityId:274939”}),但它只返回父记录或子记录。
我尝试过使用多值字段来存储子元素,但是它创建了一个平面数组,使得选择子元素变得更加困难。
我不得不创建单独的实体,然后在Node中通过分别查询它们来建立它们之间的关系,但我想通过让SOLR交付已经按照我想要的方式格式化的数据来简化它。
有没有办法达到这种结果呢?

dy2hfwbg

dy2hfwbg1#

不幸的是,目前可用的DIH并不支持这个字段,并且也没有对DIH的支持。目前它是在备用项目中进行的,并且很少有社区支持。

相关问题