Indexing Solr DataImportHandler的分块UrlDataSource

Indexing Solr DataImportHandler的分块UrlDataSource,indexing,solr,bigdata,Indexing,Solr,Bigdata,我正在研究如何将数据源分块,以便将Optimal数据导入solr,并想知道是否可以使用主url将数据分块到各个部分 例如,文件1可能有 <chunks> <chunk url="http://localhost/chunker?start=0&stop=100" /> <chunk url="http://localhost/chunker?start=100&stop=200" /> <chunk url="http://l

我正在研究如何将数据源分块,以便将Optimal数据导入solr,并想知道是否可以使用主url将数据分块到各个部分

例如,文件1可能有

<chunks>
  <chunk url="http://localhost/chunker?start=0&stop=100" />
  <chunk url="http://localhost/chunker?start=100&stop=200" />
  <chunk url="http://localhost/chunker?start=200&stop=300" />
  <chunk url="http://localhost/chunker?start=300&stop=400" />
  <chunk url="http://localhost/chunker?start=400&stop=500" />
  <chunk url="http://localhost/chunker?start=500&stop=600" />
</chunks>
每个区块url都指向类似的内容

<items>
   <item data1="info1" />
   <item data1="info2" />
   <item data1="info3" />
   <item data1="info4" />
</iems>

我正在处理5亿多条记录,因此我认为数据需要分块,以避免在使用SQLEntityProcessor时出现内存问题。我还想避免提出5亿多个web请求,因为这可能会变得很昂贵。我想

由于互联网上缺少示例,我想我会发布我最终使用的内容

<?xml version="1.0" encoding="utf-8"?>
<result>
  <dataCollection func="chunked">
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data hasmore="true" nexturl="http://server.domain.com/handler?start=0&amp;end=1000000000&amp;page=1&amp;pagesize=10"
  </dataCollection>
</result>
需要注意的是,我使用指定下一页上有更多内容,并提供指向下一页的url。这与实际情况是一致的。请注意,文档指定分页的提要应该告诉系统它有更多的内容以及从哪里获得下一批内容

<dataConfig>
    <dataSource name="b" type="URLDataSource" baseUrl="http://server/" encoding="UTF-8" />
    <document>
        <entity name="continue"
                dataSource="b"
                url="handler?start=${dataimport.request.startrecord}&amp;end=${dataimport.request.stoprecord}&amp;pagesize=100000"
                stream="true"
                processor="XPathEntityProcessor"
                forEach="/result/dataCollection/data"
                transformer="DateFormatTransformer"
                connectionTimeout="120000"
                readTimeout="300000"
                >
            <field column="id"  xpath="/result/dataCollection/data/@info" />
            <field column="id"  xpath="/result/dataCollection/data/@info" />
            <field column="$hasMore" xpath="/result/dataCollection/data/@hasmore" />
            <field column="$nextUrl" xpath="/result/dataCollection/data/@nexturl" />
        </entity>
    </document>
注意$hasMore和$nextur字段。你可能想用超时来代替。我还建议允许指定页面大小,这有助于通过tweeking设置获得最佳处理速度。我在一台带有四核Xeon处理器和32GB ram的服务器上使用多核3 solr实例,每秒索引@12.5K条记录


将结果分页的应用程序使用与存储数据的SQL server相同的系统。我还传递了开始和停止位置,以便在我们最终对solr服务器进行负载平衡时最小化配置更改….

由于互联网上缺少示例,我想我会发布我最终使用的内容

<?xml version="1.0" encoding="utf-8"?>
<result>
  <dataCollection func="chunked">
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data info="test" info2="test" />
    <data hasmore="true" nexturl="http://server.domain.com/handler?start=0&amp;end=1000000000&amp;page=1&amp;pagesize=10"
  </dataCollection>
</result>
需要注意的是,我使用指定下一页上有更多内容,并提供指向下一页的url。这与实际情况是一致的。请注意,文档指定分页的提要应该告诉系统它有更多的内容以及从哪里获得下一批内容

<dataConfig>
    <dataSource name="b" type="URLDataSource" baseUrl="http://server/" encoding="UTF-8" />
    <document>
        <entity name="continue"
                dataSource="b"
                url="handler?start=${dataimport.request.startrecord}&amp;end=${dataimport.request.stoprecord}&amp;pagesize=100000"
                stream="true"
                processor="XPathEntityProcessor"
                forEach="/result/dataCollection/data"
                transformer="DateFormatTransformer"
                connectionTimeout="120000"
                readTimeout="300000"
                >
            <field column="id"  xpath="/result/dataCollection/data/@info" />
            <field column="id"  xpath="/result/dataCollection/data/@info" />
            <field column="$hasMore" xpath="/result/dataCollection/data/@hasmore" />
            <field column="$nextUrl" xpath="/result/dataCollection/data/@nexturl" />
        </entity>
    </document>
注意$hasMore和$nextur字段。你可能想用超时来代替。我还建议允许指定页面大小,这有助于通过tweeking设置获得最佳处理速度。我在一台带有四核Xeon处理器和32GB ram的服务器上使用多核3 solr实例,每秒索引@12.5K条记录


将结果分页的应用程序使用与存储数据的SQL server相同的系统。我还传递了开始和停止位置,以便在我们最终负载平衡solr服务器时将配置更改降至最低……

实体可以嵌套以执行您最初想要的操作。内部实体可以引用outter字段,如url=${chunk.link},其中chunk是outter实体名称,link是字段名称

<?xml version="1.0" encoding="windows-1250"?>
<dataConfig>
  <dataSource name="b" type="URLDataSource" baseUrl="http://server/" encoding="UTF-8" />
  <document>
    <entity name="chunk"
      dataSource="b"
      url="path/to/chunk.xml"
      stream="true"
      processor="XPathEntityProcessor"
      forEach="/chunks/chunk"
      transformer="DateFormatTransformer"
      connectionTimeout="120000"
      readTimeout="300000" >
      <field column="link" xpath="/chunks/chunk/@url" />
      <entity name="item"
        dataSource="b"
        url="${chunk.link}"
        stream="true"
        processor="XPathEntityProcessor"
        forEach="/items/item"
        transformer="DateFormatTransformer"
        connectionTimeout="120000"
        readTimeout="300000" >
        <field column="info"  xpath="/items/item/@info" />
      </entity>
    </entity>
</document>
</dataConfig>

可以嵌套该实体以执行最初需要的操作。内部实体可以引用outter字段,如url=${chunk.link},其中chunk是outter实体名称,link是字段名称

<?xml version="1.0" encoding="windows-1250"?>
<dataConfig>
  <dataSource name="b" type="URLDataSource" baseUrl="http://server/" encoding="UTF-8" />
  <document>
    <entity name="chunk"
      dataSource="b"
      url="path/to/chunk.xml"
      stream="true"
      processor="XPathEntityProcessor"
      forEach="/chunks/chunk"
      transformer="DateFormatTransformer"
      connectionTimeout="120000"
      readTimeout="300000" >
      <field column="link" xpath="/chunks/chunk/@url" />
      <entity name="item"
        dataSource="b"
        url="${chunk.link}"
        stream="true"
        processor="XPathEntityProcessor"
        forEach="/items/item"
        transformer="DateFormatTransformer"
        connectionTimeout="120000"
        readTimeout="300000" >
        <field column="info"  xpath="/items/item/@info" />
      </entity>
    </entity>
</document>
</dataConfig>