lar*_*ron 3 solr dataimporthandler dih
我是Solr的新手,我正在努力导入一些不包含ID字段的XML数据,尽管它是必需的,因为它表示我的schema.xml:
一个XML示例:
<results>
<estacions>
<estacio id="72400" nom="Aeroport"/>
<estacio id="79600" nom="Arenys de Mar"/>
...
</estacions>
</results>
Run Code Online (Sandbox Code Playgroud)
Schema.xml的:
<uniqueKey>id</uniqueKey>
Run Code Online (Sandbox Code Playgroud)
此时,我需要从http fetch导入这个xml,然后我使用DataimportHandler.这是我的data-config.xml
<dataConfig>
<dataSource type="URLDataSource" />
<document>
<entity name="renfe"
url="http://host_url/myexample.xml"
processor="XPathEntityProcessor"
forEach="/results/estacions/estacio"
transformer="script:generateCustomId">
<field column="idestacio" xpath="/results/estacions/estacio/@id" commonField="true" />
<field column="nomestacio" xpath="/results/estacions/estacio/@nom" commonField="true" />
</entity>
</document>
Run Code Online (Sandbox Code Playgroud)
然后,它似乎工作正常,但我收到以下错误:org.apache.solr.common.SolrException:[doc = null]缺少必填字段:id
这让我觉得我应该在导入时生成一个自动id,并使用data-config.xml,但是我没有看到如何做到这一点.
我应该怎么做?使用ScriptTransformer?任何想法都很感激
另一个问题:我可以在导入期间强制输入值吗?
例如:( <field column="site" value="estacions"/>
显然这不起作用)
您可以使用以下代码生成ID:
<dataConfig>
<script><![CDATA[
id = 1;
function GenerateId(row) {
row.put('id', (id ++).toFixed());
return row;
}
]]></script>
<dataSource type="URLDataSource" />
<document>
<entity name="renfe"
url="http://host_url/myexample.xml"
processor="XPathEntityProcessor"
forEach="/results/estacions/estacio"
transformer="script:GenerateId">
<field column="idestacio" xpath="/results/estacions/estacio/@id" commonField="true" />
<field column="nomestacio" xpath="/results/estacions/estacio/@nom" commonField="true" />
</entity>
</document>
Run Code Online (Sandbox Code Playgroud)