在SOLR中使用DIH配置嵌套实体 [英] Configuration Nested Entity using DIH in SOLR

查看:86
本文介绍了在SOLR中使用DIH配置嵌套实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用SOLR 6.x用DIH创建嵌套实体

我读了在Solr数据导入处理程序中定义嵌套实体

和吉拉 https://issues.apache.org/jira/browse/SOLR-5147

我做了

Schema.xml

 < fields><字段名="variantList"类型="string"索引="true"存储="true"/>< field name ="variantList.variants" type ="string" multiValued ="false" required ="false"/>< field name ="variantList.stockMinimum" type ="int" multiValued ="false" required ="false"/>< field name ="variantList.stockOnHand" type ="int" multiValued ="false" required ="false"/>< field name ="variantList.stockVariantId" type ="long" multiValued ="false" required ="false"/></fields> 

data-config.xml

 < dataConfig>< dataSource/>< document><实体名称="PARENT" rootEntity ='true'查询="*">< field column ="ID" name ="id"/>< field column ="BRAND_ID" name ="brandId"/>< field column ="PRODUCT_ID" name ="productId"/>< field column ="MERCHANT_PRODUCT_ID" name ="merchantProductId"/>< field column ="MERCHANT_ID" name ="merchantId"/>< field column ="SALES_REGION" name ="salesRegion"/>< field column ="LOCAL_DIRECT_DELIVERY" name ="localDirectDelivery"/>< field column ="NORMAL_SELLINGPRICE" name ="normalSellingPrice"/>< field column ="NEW_PRODUCT" name ="newProduct"/>< field column ="BEST_SELLER" name ="bestSeller"/>< field column ="CATEGORY1_ID" name ="category1Id"/>< field column ="CATEGORY2_ID" name ="category2Id"/>< field column ="CATEGORY3_ID" name ="category3Id"/>< field column ="CATEGORY4_ID" name ="category4Id"/>< field column ="DISPLAY_IMAGE_PATH" name ="displayImagePath"/>< field column ="MERCHANT_NAME" name ="merchantName"/>< field column ="PRODUCT_NAME" name ="productName"/>< field column ="CATEGORY1_NAME" name ="category1Name"/>< field column ="CATEGORY2_NAME" name ="category2Name"/>< field column ="CATEGORY3_NAME" name ="category3Name"/>< field column ="CATEGORY4_NAME" name ="category4Name"/><实体名称="variantList" child ="true"查询="select VARIANT,STOCK_MINIMUM,STOCK_ONHAND,来自SIF_MERCHANT_CATALOG_VARIANT的ID其中MERCHANT_CATALOG_ID ='$ {PARENT.ID}'>< field column ="VARIANT" name ="variantList.variants_s"/>< field column ="STOCK_MINIMUM" name ="variantList.stockMinimum"/>< field column ="STOCK_ONHAND" name ="variantList.stockOnHand"/>< field column ="ID" name ="variantList.stockVariantId"/></entity></entity></document></dataConfig> 

我想要的结果

 < doc parent_1/>< doc child_1/>< doc child_1/>< doc parent_2/>< doc child_1/> 

我得到了

 < doc child_1/>< doc child_1/>< doc parent_1/>< doc child_2/>< doc parent_2/> 

我看到了aheryan的答案,应该是正确的,我可以使用 child = true

我想念什么吗?

谢谢

解决方案

如果您仅执行常规查询,则子文档将与父文档一起返回.作为一个简单的清单.所以,这可能就是您所看到的.

检查嵌套文档是否最简单的方法是查看_root_字段的值,因为父/子层次结构块中的所有文档的值都相同.

您还可以仅搜索父文档,并使用Defining nested entities in Solr Data Import Handler

and jira https://issues.apache.org/jira/browse/SOLR-5147

what i did

Schema.xml

<fields>
<field name="variantList" type="string" indexed="true" stored="true"    />
<field name="variantList.variants" type="string" multiValued="false" required="false"/>
<field name="variantList.stockMinimum" type="int" multiValued="false" required="false"/>
<field name="variantList.stockOnHand" type="int" multiValued="false" required="false"/>
<field name="variantList.stockVariantId" type="long" multiValued="false" required="false"/>
</fields>

data-config.xml

<dataConfig>
  <dataSource /> 
  <document>
    <entity name="PARENT" rootEntity='true' query="*" >
     <field column="ID" name="id" />
     <field column="BRAND_ID" name="brandId" />
     <field column="PRODUCT_ID" name="productId" />
     <field column="MERCHANT_PRODUCT_ID" name="merchantProductId" />
     <field column="MERCHANT_ID" name="merchantId" />
     <field column="SALES_REGION" name="salesRegion" />
     <field column="LOCAL_DIRECT_DELIVERY" name="localDirectDelivery" />
     <field column="NORMAL_SELLINGPRICE" name="normalSellingPrice" />
     <field column="NEW_PRODUCT" name="newProduct" />
     <field column="BEST_SELLER" name="bestSeller" />
     <field column="CATEGORY1_ID" name="category1Id" />
     <field column="CATEGORY2_ID" name="category2Id" />
     <field column="CATEGORY3_ID" name="category3Id" />
     <field column="CATEGORY4_ID" name="category4Id" />
     <field column="DISPLAY_IMAGE_PATH" name="displayImagePath" />
     <field column="MERCHANT_NAME" name="merchantName" />
     <field column="PRODUCT_NAME" name="productName" />
     <field column="CATEGORY1_NAME" name="category1Name" />
     <field column="CATEGORY2_NAME" name="category2Name" />
     <field column="CATEGORY3_NAME" name="category3Name" />
     <field column="CATEGORY4_NAME" name="category4Name" />





        <entity name="variantList" child="true" query="select VARIANT , STOCK_MINIMUM , STOCK_ONHAND , ID from SIF_MERCHANT_CATALOG_VARIANT 
                                                    where MERCHANT_CATALOG_ID = '${PARENT.ID}'">
                <field column="VARIANT" name="variantList.variants_s" />
                <field column="STOCK_MINIMUM" name="variantList.stockMinimum" />
                <field column="STOCK_ONHAND" name="variantList.stockOnHand" />
                <field column="ID" name="variantList.stockVariantId" />
            </entity>
    </entity>
  </document>
</dataConfig>

result that i want

<doc parent_1/>
  <doc child_1/>
  <doc child_1/>
<doc parent_2/>
  <doc child_1/>

and what i get

<doc child_1/>
<doc child_1/>
<doc parent_1/>
<doc child_2/>
<doc parent_2/>

and i see aheryan's anwers , it should be right , i can use child=true

am i miss something ?

thanks

解决方案

The child docs are returned together with parent docs if you just do a general query. As a flat list. So, that's probably what you are seeing.

The easiest way to check whether you got nested documents is to look at the value of the _root_ field, as the value will be the same for all documents in the parent/child hierarchy block.

You could also search for parent documents only and use Child Document Transformer to list its children.

这篇关于在SOLR中使用DIH配置嵌套实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆