2012-04-30 63 views
2

我在Solr的是新的,我掙扎進口一些不包含ID字段的XML數據,雖然它的要求,因爲它說我的schema.xml:如何使用DataImportHandler生成一個Id?

的XML例子:

<results> 
<estacions> 
<estacio id="72400" nom="Aeroport"/> 
<estacio id="79600" nom="Arenys de Mar"/> 
... 
</estacions> 
</results> 

Schema.xml的:

<uniqueKey>id</uniqueKey> 

在這一點上,我需要進口從http這個XML提取,然後我用DataimportHandler。 這是我的數據-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> 

然後,它似乎能正常工作,但我得到了以下錯誤: org.apache.solr.common.SolrException:[DOC = NULL ]缺少必填字段:編號

這讓我覺得我應該在導入時使用data-config.xml生成一個自動ID,但我不明白怎麼做。

我該怎麼辦?使用ScriptTransformer?任何想法是感謝

而另一個問題:我可以強制導入過程中的值?

對於前:<field column="site" value="estacions"/>(這顯然不工作)

回答

7

您可以使用下面的代碼來生成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> 
+0

偉大的!現在看起來很容易... – larrytron