我想设置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交付已经按照我想要的方式格式化的数据来简化它。
有没有办法达到这种结果呢?
1条答案
按热度按时间dy2hfwbg1#
不幸的是,目前可用的DIH并不支持这个字段,并且也没有对DIH的支持。目前它是在备用项目中进行的,并且很少有社区支持。