设为首页 收藏本站
查看: 593|回复: 0

[经验分享] Solr Data Import 快速入门

[复制链接]

尚未签到

发表于 2016-12-15 07:08:51 | 显示全部楼层 |阅读模式
  
转载:Solr Data Import 快速入门
发表于:2010年3月26日 | 分类:Demo, Solr | 标签: dih, solr | views(4,033)
版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.
 
原文出处:http://blog.chenlb.com/2010/03/solr-data-import-quick-start.html
大概在 solr 1.3 刚出来的时候(2008 年底)就用过 DataImportHandler(DIH),当时觉得很方便的。后来由于有好多限制,就自己写了个做索引的框架。现有个简单的应用要用 dih 来做(小数据量的表,可以用它来做)。备忘记录下。
DataImportHandler 最大的优点是基本不用写代码,把数据库(其实也可以用 http/file 资源)中的记录放到索引中。现大概看下步骤:
1、编辑 solrconfig.xml 注册一个请求 uri 为 "/dataimport" 的请求处理器(org.apache.solr.handler.dataimport.DataImportHandler),代码如:

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

2、创建 data-config.xml 文件放到 solr.home/conf 目录下,内容如下:

  • <dataConfig>  
  •   <dataSource type="JdbcDataSource"  
  •               driver="com.mysql.jdbc.Driver"  
  •               url="jdbc:mysql://localhost/dbname"  
  •               user="user-name"  
  •               password="password"/>  
  •   <document>  
  •     <entity name="id"  
  •             query="select id,name from mytable">  
  •     </entity>  
  •   </document>  
  • </dataConfig>  

3、在 schema.xml 里创建 id 与 name 的字段声明。
4、把 mysql 的 jdbc.jar 放到 solr.home/lib 目录下。
5、启动 solr 后,执行命令:
http://localhost:8080/solr/dataimport?command=full-import 这 url 告诉 solr 做全量索引,做索引中会删除所有数据。当然也可以用 clean=false 参数来告诉它不删除,但也会删除相同id的(在 scheam.xml 的uniqueKey 声明的)。http://localhost:8080/solr/dataimport?command=full-import&clean=false
上面的是 mysql 字段与 scheam.xml 声明的一样,当然不一样时可以用 sql 的 as 来使它们一样。
还可以用 data-config.xml 里指定,如:

  • <dataConfig>  
  •   <dataSource type="JdbcDataSource"  
  •               driver="com.mysql.jdbc.Driver"  
  •               url="jdbc:mysql://localhost/dbname"  
  •               user="user-name"  
  •               password="password"/>  
  •   <document>  
  •     <entity name="id"  
  •             query="select id,name from mytable">  
  •        <field column="id" name="solr_id"/>  
  •        <field column="name" name="solr_name"/>  
  •     </entity>  
  •   </document>  
  • </dataConfig>  

entity/field 中的 name 是指 scheam.xml 里指定的,column 是 sql 里出来的字段。
大多数,做索引时的数据不是在一个表里的,比较一对多的。DIH 还提供多表取数据。
把 data-config.xml 改为:

  • <dataConfig>  
  •   <dataSource type="JdbcDataSource"  
  •               driver="com.mysql.jdbc.Driver"  
  •               url="jdbc:mysql://localhost/dbname"  
  •               user="user-name"  
  •               password="password"/>  
  •   <document>  
  •     <entity name="outer"  
  •             query="select id,name,desc from mytable">  
  •        <field column="id" name="solr_id"/>  
  •        <field column="name" name="solr_name"/>  
  •        <entity name="inner"  
  •                query="select details from another_table where id ='${outer.id}'">  
  •               <field column="details" name="solr_details"/>  
  •        </entity>  
  •     </entity>  
  •   </document>  
  • </dataConfig>  

在 scheam.xml 里指定 solr_details 字段为多值的 multiValued="true"。在上面 inner entity 里的 sql 语句可以加参数 ${outer.id} 就是 mytable 的 id 字段。
修改好后,重启,再做一次索引就有效果了,一对多一个缺点是会有 N+1 个 sql 查询。对小数据量的索引合适用 solr data import。
参考:http://wiki.apache.org/solr/DIHQuickStart

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314324-1-1.html 上篇帖子: solr 笔记 部署在tomcat上 下篇帖子: solr 中文分词filedType定义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表