0

我有一个现有的集合,我想向其中添加一个 RSS 导入器。我已经复制了从 example-DIH/solr/rss 代码中可以看到的内容。

详细信息如下,但底线是一切似乎都在运行,但它总是说“Fetched:0”(我没有得到任何文件)。tomcat 日志中没有异常。

问题:

  • 有没有办法对 rss 导入器进行调试?
  • 我可以看到 solr 的实际请求和响应吗?
  • 什么会导致请求成功,但没有获取任何行?
  • 是否有将 RSS DIH添加现有集合的教程?

谢谢!

我的 solrconfig.xml 文件包含 requestHandler:

<requestHandler name="/dataimport"
    class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
            <str name="config">rss-data-config.xml</str>
    </lst>
</requestHandler>

和 rss-data-config.xml:

<dataConfig>
    <dataSource type="URLDataSource" />
    <document>
        <entity name="slashdot"
                pk="link"
                url="http://rss.slashdot.org/Slashdot/slashdot"
                processor="XPathEntityProcessor"
                forEach="/rss/channel | /rss/item"
                transformer="DateFormatTransformer">

            <field column="source_name" xpath="/rss/channel/title" commonField="true" />

            <field column="title" xpath="/rss/item/title" />
            <field column="link" xpath="/rss/item/link" />
            <field column="body" xpath="/rss/item/description" />
            <field column="date" xpath="/rss/item/date" dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss" />
        </entity>
    </document>
</dataConfig>

并来自 schema.xml:

<fields>
   <field name="title" type="text_general" required="true" indexed="true" stored="true"/>
   <field name="link" type="string" required="true" indexed="true" stored="true"/>
   <field name="source_name" type="text_general" required="true" indexed="true" stored="true"/>
   <field name="body" type="text_general" required="false" indexed="false" stored="true"/>
   <field name="date" type="date" required="true" indexed="true" stored="true" />
   <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
   <field name="_version_" type="long" indexed="true" stored="true"/>
<fields>

当我从管理网页运行数据导入时,一切似乎都很顺利。它显示“请求:1”,并且在 tomcat 日志中没有异常:

Mar 12, 2013 9:02:58 PM org.apache.solr.handler.dataimport.DataImporter maybeReloadConfiguration
INFO: Loading DIH Configuration: rss-data-config.xml
Mar 12, 2013 9:02:58 PM org.apache.solr.handler.dataimport.DataImporter loadDataConfig
INFO: Data Configuration loaded successfully
Mar 12, 2013 9:02:58 PM org.apache.solr.handler.dataimport.DataImporter doFullImport
INFO: Starting Full Import
Mar 12, 2013 9:02:58 PM org.apache.solr.handler.dataimport.SimplePropertiesWriter readIndexerProperties
INFO: Read dataimport.properties
Mar 12, 2013 9:02:59 PM org.apache.solr.handler.dataimport.DocBuilder execute
INFO: Time taken = 0:0:0.693
Mar 12, 2013 9:02:59 PM org.apache.solr.update.processor.LogUpdateProcessor finish
INFO: [articles] webapp=/solr path=/dataimport params={optimize=false&clean=false&indent=true&commit=false&verbose=true&entity=slashdot&command=full-import&debug=true&wt=json} {} 0 706
4

4 回答 4

0

您使用的是哪个 Solr 版本?

对于 3.X,您具有 DIH 的调试功能,这将帮助您逐步调试。
它在 4.X 中丢失可能检查SOLR-4151

于 2013-03-13T04:26:38.180 回答
0

您的问题是由于您的 rss-data-config.xml 和定义的 xpaths。

如果您在 Internet Explorer 中打开 URL http://rss.slashdot.org/Slashdot/slashdot并按 F12 以获取开发人员工具,它将向您显示 HTML 的结构。

您可以看到该节点<item><channel>而不是的子节点<rss>。所以你的配置应该如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="URLDataSource" />
<document>
<entity name="slashdot"
            pk="link"
            url="http://rss.slashdot.org/Slashdot/slashdot"
            processor="XPathEntityProcessor"
            forEach="/rss/channel | /rss/channel/item"
            transformer="DateFormatTransformer">

        <field column="source_name" xpath="/rss/channel/title" commonField="true" />

        <field column="title" xpath="/rss/channel/item/title" />
        <field column="link" xpath="/rss/channel/item/link" />
        <field column="body" xpath="/rss/channel/item/description" />
        <field column="date" xpath="/rss/channel/item/date" dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss" />
    </entity>
</document>
</dataConfig>
于 2013-03-15T04:47:50.450 回答
0

以下 data-config.xml 文件适用于 Slashdot (Solr 4.2.0)

<dataConfig>
    <dataSource type="HttpDataSource" />
<document>
<entity name="slashdot"
    pk="link"
    url="http://rss.slashdot.org/Slashdot/slashdot"
    processor="XPathEntityProcessor"
    forEach="/rss/channel/item"
    transformer="DateFormatTransformer">

    <field column="title"        xpath="/rss/channel/item/title" />
    <field column="link"         xpath="/rss/channel/item/link" />
    <field column="description"  xpath="/rss/channel/item/description" />
    <field column="creator"      xpath="/rss/channel/item/creator" />
    <field column="item-subject" xpath="/rss/channel/item/subject" />

    <field column="slash-department" xpath="/rss/channel/item/department" />
    <field column="slash-section"    xpath="/rss/channel/item/section" />
    <field column="slash-comments"   xpath="/rss/channel/item/comments" />
    <field column="date" xpath="/rss/channel/item/date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" />
    </entity>
</document>

请注意 dateTimeFormat 上的额外“Z”,根据“schema.xml”这是必需的

引用 schema.xml

此日期字段的格式为 1995-12-31T23:59:59Z,是 dateTime http://www.w3.org/TR/xmlschema-2/#dateTime
的规范表示形式的更受限制的形式 结尾的“Z”表示 UTC 时间并且是强制性的。允许使用可选的小数秒:1995-12-31T23:59:59.999Z 所有其他组件都是必需的。

于 2013-08-13T15:27:06.877 回答
0
Update your rss-data-config.xml as below

'<dataConfig>
    <dataSource type="URLDataSource" />
    <document>
        <entity name="slashdot"
                pk="link"
                url="http://rss.slashdot.org/Slashdot/slashdot"
                processor="XPathEntityProcessor"
                forEach="/RDF/channel | /RDF/item"
                transformer="DateFormatTransformer">

            <field column="source"       xpath="/RDF/channel/title"   commonField="true" />
            <field column="source-link"  xpath="/RDF/channel/link"    commonField="true" />
            <field column="subject"      xpath="/RDF/channel/subject" commonField="true" />

            <field column="title"        xpath="/RDF/item/title" />
            <field column="link"         xpath="/RDF/item/link" />
            <field column="description"  xpath="/RDF/item/description" />
            <field column="creator"      xpath="/RDF/item/creator" />
            <field column="item-subject" xpath="/RDF/item/subject" />

            <field column="slash-department" xpath="/RDF/item/department" />
            <field column="slash-section"    xpath="/RDF/item/section" />
            <field column="slash-comments"   xpath="/RDF/item/comments" />
            <field column="date" xpath="/RDF/item/date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss" />
        </entity>
    </document>
</dataConfig>'

It worked for me
于 2016-04-22T12:55:38.953 回答