(二)solr data import

2019-03-27 01:21|来源: 网路

 solr 的 data import 导入 mysql数据

(1)、编辑 example/solr/conf/solrconfig.xml 添加 request handler
 
 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
         <str name="config">data-config.xml</str>
      </lst>
  </requestHandler>
 
(2)、创建 example/solr/conf/data-config.xml
 
<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://192.168.2.242:3306/demo?characterEncoding=UTF-8"
              user="demo"
              password="*****"/>
  <document>
    <entity name="contract"
            query="select id,contract_name,contract_num,add_time from contract">
        <field column = "id" name="contractId"/>        

       <field column = "contract_name" name = "contractName" />

        <field column = "contract_num" name="contractNum" />
    </entity>
  </document>
</dataConfig>
 
(3)、编辑example/solr/conf/scheme.xml
 
在fields里头添加
 
   <field name="contractNum" type="string" indexed="true" stored="true"/>

  <field name="contractId" type="string" indexed="true" stored="true"/>

<field name="contractName" type="string" indexed="true" stored="true"/>
 
 (同时将uniqueKey改为contractId,并且将id字段的required为true去掉)

 
(4)、启动solr,报Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'
添加相关data import lib 及 jdbc driver lib
~/solr-4.6.0/example/solr-webapp/webapp/WEB-INF/lib# cp ~/solr-4.6.0/dist/*.jar .

  使用同一个zookeeper的solr也得进行相关jar的拷贝

 

(5)启动solr

java -Dbootstrap_conf=true -Dcollection.configName=scs -DzkRun -DnumShards=1 -jar start.jar

java -DzkHost=192.168.4.129:9983 -jar start.jar


(6)执行full import 命令

http://192.168.4.129:8983/solr/#/

 

 


转自:http://my.oschina.net/scipio/blog/214299

相关问答

更多
  • 如果我理解你的问题: 将文档插入Solr / Lucene时,它所看到的唯一内容是您在架构中设置为uniqueKey的字段。 如果您尝试向现有文档添加其他属性,Solr将删除现有文档(具有该唯一ID)并仅保留您在该文档中提供的上次插入索引的字段/属性。 Solr中有一个称为部分更新的功能,但它基本上读取当前字段值(因此必须stored所有字段),然后重新插入它们,就像您提供它们一样。 我认为这是你最好的选择。 看看这里了解更多信息。 If I understood your question correct ...
  • 您可以使用类似于http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport中提到的方法。 然后,您在data-config.xml中的查询将是
    一种解决方案可能是在data-config.xml设置batchSize 。 以下是如何执行此操作的示例: 此示例取自以下链接: DataImportHandler - ...
  • JAVA_HOME=/usr/java/default JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr/solr $JAVA_OPTIONS" JETTY_HOME=/opt/solr JETTY_USER=solr JETTY_LOGS=/opt/solr/logs 所有这些设置都很重要。 特别是,不设置JETTY_LOGS会导致jetty尝试(并且失败)将请求日志放在/ home / solr / logs中。 通过链接 https://wiki.apache.org ...
  • 这就是我解决问题的方法。 我使用Camel-Http组件而不是Camel-Solr组件,并调用Solr数据导入处理程序来执行delta导入。 路线: from("quartz2://SolrUpdateHandlerTimer?trigger.repeatCount=-1&trigger.repeatInterval=300000") .to("direct:start"); from("direct:start") .setHeader(Exchange. ...
  • 如果DIH处理程序忙于运行请求,则会忽略发送给它的任何其他请求。 所以你必须回顾一下你如何/何时调用DIH的方法,一些想法: 正如你所说你有很高的编辑频率,通过id重新编排似乎并不是最好的,基于时间的某些时间似乎更具可扩展性。 你可以添加一个'lastUpdated'列(当这个行被创建/更新时通过触发器填充),然后每X(1分钟,5分钟......任何你能负担得起)调用reindex。 如果忽略一个请求,则不会丢失数据,应该重新索引的行将在下一个运行的增量上重新索引。 如果你想保持你的基于ID的方法,你需要: ...
  • 您可以使用url http://host:port/solr/dataimport?command=status或甚至不使用任何命令来轮询dataimporthandler的状态,因为status是默认值。 通过这种方式,您可以获得有关dataimport进程的一些详细信息,您可以查看它是否仍在进行中。 看看可用的命令 。 You can poll the status of the dataimporthandler with the url http://host:port/solr/dataimpor ...
  • 您可以将所有数据导入默认字段 。 那么您不需要明确提及字段名称。 (虽然你仍然可以,如果你想) 使用Solr的默认schema.xml已包含使用此类“catchall”字段的示例: 首先,必须像任何其他字段一样声明该字段: 然后,必须将此新字段声明为默认字段。 每当搜索不到特定字段时,将搜索以下字段:
  • 也许不是一个正确的答案,但问题似乎解决了。 当然,我们必须做一些事情才能实现这一点,但是我们所能想到的就是删除log4j属性文件中的CONSOLE日志记录并删除它创建的11GB日志文件。 猜猜这可能至少可以为其他人提供其他东西来尝试谁有同样的问题。 Maybe not a proper answer but the issue seemed to resolve itself. Of course we must have done something to make this happen, howeve ...
  • 您可能希望使用嵌套实体,外部实体为FileListEntityProcessor ,您的实体(实体)位于其中并使用外部实体公开的变量。 您还需要在该外部实体上将rootEntity属性设置为false,以便为每个内部实体生成文档。 基本上,您需要在现有定义中包含更多级别的实体。 或者,如果你有一些略有不同的文件,只有几个,你可以并排放置几个实体定义,DIH将全部运行它们。 You would want to use nested entities with outside entity being File ...