【问题标题】:How to generate an Id using DataImportHandler?如何使用 DataImportHandler 生成 Id?
【发布时间】:2012-04-30 09:25:40
【问题描述】:

我是 Solr 的新手,我正在努力导入一些不包含 ID 字段的 XML 数据,尽管它是必需的,因为它说我的 schema.xml:

一个 XML 示例:

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

Schema.xml:

<uniqueKey>id</uniqueKey>

此时,我需要从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>

然后,它似乎工作正常,但我收到以下错误: org.apache.solr.common.SolrException:[doc=null] 缺少必填字段:id

这让我觉得我应该在导入时生成一个自动 id,并使用 data-config.xml,但我不知道该怎么做。

我该怎么办?使用 ScriptTransformer?有什么想法不胜感激

还有一个问题:我可以在导入期间强制一个值吗?

例如:&lt;field column="site" value="estacions"/&gt;(显然这不起作用)

【问题讨论】:

    标签: solr dataimporthandler dih


    【解决方案1】:

    您可以使用以下代码生成 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2020-01-29
      • 2018-06-22
      相关资源
      最近更新 更多