Solr:获取DataImportHandler以忽略缺少的元素

时间:2017-11-14 18:00:52

标签: xml solr dataimporthandler dih

我尝试使用DIH从我不维护的XML源导入数据。此XML具有按属性分组的可选元素,例如颜色或风格。并非所有实体都具有所有属性,这些属性非常精细且有效。可悲的是,当我仍然想要它们时,DIH会跳过这些实体。这是我的data-config.xml

<dataConfig>
  <dataSource type="FileDataSource" name="datasource"/>
  <document>
   <entity
     name="files"
     processor="FileListEntityProcessor"
     baseDir="C:\\"
     fileName="recipe_page.*xml"
     recursive="false"
     rootEntity="false"
     dataSource="null">
     <entity
      name="file"
      processor="XPathEntityProcessor"
      url="${files.fileAbsolutePath}"
      forEach="/results|/results/recipe"
      stream="true"
      transformer="TemplateTransformer">
       <field column="recipe_id" xpath="/results/recipe/recipeID" />
       <field column="recipe_title" xpath="/results/recipe/recipeTitle" />     
       <field column="color" xpath="/results/recipe/attributes/Color" default="" />
       <field column="drink_classification" xpath="/results/recipe/attributes/DrinkClassification" default="" />
       <field column="flavor" xpath="/results/recipe/attributes/Flavor" default="" />        
       <field column="uid" template="recipe_${file.recipe_id}" />
       <field column="document_type" template="recipe" />
    </entity>
   </entity>
  </document>
</dataConfig>

如何告诉DIH忽略缺失元素或至少为这些元素设置默认值?

1 个答案:

答案 0 :(得分:0)

我不确定,我知道如何让XPathEntityProcessor知道忽略丢失的xpath语句,但我有一个想法,你可以使用Transformer设置字段的默认值特别是TemplateTransformer

  

您可以使用模板转换器构建或修改字段   值,也许使用其他字段的值。你可以插入额外的   文字进入模板。

我希望这样的事情适合你:

<entity name="en" pk="id" transformer="TemplateTransformer" ...>

  <!-- generate a full address from fields containing the component parts -->
  <field column="color" template="default-color" />
</entity>

我试图用一个值替换字段值,但是,我不确定它会有用(我希望它替换值,如果它存在,但是,它应该被双重检查)

在这种情况下,可以创建自定义Transformer:

public class DefaultValueTransformer {
        public Object transformRow(Map<String, Object> row) {
                String color= row.get("color");
                if (artist != null)             
                        row.put("color", "default-color-value");

                return row;
        }
}

以后用作:

<entity name="entity" query="..." transformer="my.package.DefaultValueTransformer">