3

私はSolrが初めてで、IDフィールドを含まないXMLデータをインポートするのに苦労しています.

XML の例:

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

スキーマ.xml:

<uniqueKey>id</uniqueKey>

この時点で、この xml を http fetch からインポートする必要があり、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>

その後、正常に動作しているようですが、次のエラーが発生しました: org.apache.solr.common.SolrException: [doc=null] missing required field: id

これにより、インポート中にdata-config.xmlを使用して自動IDを生成する必要があると思いますが、その方法を確認することはできません。

どうすればいいですか?ScriptTransformer を使用していますか? どんなアイデアでも感謝します

もう 1 つの質問: インポート中に値を強制できますか?

例:(<field column="site" value="estacions"/>明らかにこれは機能しません)

4

1 に答える 1

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>
于 2012-04-30T10:09:29.563 に答える