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

[经验分享] solr的全量索引

[复制链接]

尚未签到

发表于 2016-12-15 10:26:03 | 显示全部楼层 |阅读模式
紧接上篇ansj分词整合后,开始需要做索引。索引分增量和全量,可以直接连接数据库去做,也可以通过程序去做,以下实现连接数据库去做,相对来说比较简单。



1.修改multicore/new_core/conf/solrconfig.xml文件(上篇提到过的),在里面新增



Xml代码  
1.<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
2.     <lst name="defaults">  
3.     <str name="config">data-config.xml</str>  
4.     </lst>   
5.</requestHandler>   
6.<requestHandler name="/deltaimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
7.    <lst name="defaults">  
8.        <str name="config">delta-data-config.xml</str>  
9.    </lst>  
10.</requestHandler>  

其中第一段是专门做全量索引的,第二段做增量索引(主要是靠DataImportHandler类实现)



2.新增multicore/new_core/conf/data-config.xml文件



Xml代码  
1.<dataConfig>  
2.    <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"  
3.        url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf8&amp;useUnicode=true"  
4.        user="root" password="HyS_Db@2014"/>  
5.    <document name="mall_goods">  
6.        <entity name="MallGoods" pk="id"  
7.                query="select * from mall_goods limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"  
8.                transformer="RegexTransformer">  
9.            <field column="goods_id" name="id" />  
10.            <field column="title" name="title" />  
11.            <field column="subtitle" name="subtitle" />  
12.            <field column="cover_img_path" name="coverImgPath" />  
13.            <field column="description" name="description" />  
14.            <field column="update_date" name="updateDate" />  
15.        </entity>  
16.    </document>  
17.</dataConfig>  

dataSource不用说了,数据源配置来的

entity文档中的实体配置(注意pk="id" 不能随便改 ,需要和schema.xml中的<uniqueKey>id</uniqueKey>匹配,否则会报“ org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id”)

query 查询语句(可分页)

transformer 暂时不清楚干啥

field定义列名



3.新增multicore/new_core/conf/delta-data-config.xml文件





Xml代码  
1.<dataConfig>  
2.    <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"  
3.        url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf8&amp;useUnicode=true"  
4.        user="root" password="HyS_Db@2014"/>  
5.    <document name="mall_goods">  
6.        <entity name="MallGoods" pk="id"  
7.                query="select * from mall_goods"  
8.                deltaImportQuery="select * from mall_goods where goods_id='${dih.delta.id}'"  
9.                deltaQuery="select goods_id as id from mall_goods where update_date &gt; '${dih.last_index_time}'"  
10.                transformer="RegexTransformer">  
11.            <field column="goods_id" name="id" />  
12.            <field column="title" name="title" />  
13.            <field column="subtitle" name="subtitle" />  
14.            <field column="cover_img_path" name="coverImgPath" />  
15.            <field column="description" name="description" />  
16.            <field column="update_date" name="updateDate" />  
17.        </entity>  
18.    </document>  
19.</dataConfig>  



deltaQuery查询出有更改过的id

deltaImportQuery根据id查询



4.修改multicore/new_core/conf/schema.xml文件,定义field索引配置



Xml代码  
1.<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />   
2.<field name="title" type="text_ansj" indexed="true" stored="true" required="true" multiValued="false"/>  
3.<field name="subtitle" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>  
4.<field name="coverImgPath" type="string" indexed="false" stored="true" required="true" multiValued="false" />  
5.<field name="description" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>  
6.<field name="updateDate" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>  
7.      

注意上面选择一下text_ansj



5.solr的war包可能还缺少部分jar包,需要把mysql的jar,以及solr项目中dist目录下的jar包都放到solr的web站点中



6.开始运行

全量:http://solr.xxxx.com:8082/new_core/dataimport?command=full-import&commit=true&clean=false&offset=0&length=100000(其中0到100000的数据建立索引)

增量:http://solr.ehaoyao.com:8082/new_core/deltaimport?command=delta-import&entity=MallGoods



entity:是document下面的标签(data-config.xml)。使用这个参数可以有选择的执行一个或多个entity   。使用多个entity参数可以使得多个entity同时运行。如果不选择此参数那么所有的都会被运行。

clean:选择是否要在索引开始构建之前删除之前的索引,默认为true

commit:选择是否在索引完成之后提交。默认为true

optimize:是否在索引完成之后对索引进行优化。默认为true

debug:是否以调试模式运行,适用于交互式开发(interactive development mode)之中。



请注意,如果以调试模式运行,那么默认不会自动提交,请加参数“commit=true”





注意:在做增量索引的时候

很容易出现deltaQuery has no column to resolve to declared primary key pk='id'这种异常

主要是因为ID" must be used as it is in 'deltaQuery' select statement as "select ID from ..."

(if you different name for ID column in database, then use 'as' keyword in select statement. In my case I had 'studentID' as primary key in student table. So I used it as "select studentID as ID from ..."

--> The same applies to 'deletedPkQuery'

At present its working fine for me. Any updation in database is reflected in Solr as well.

所以,delta-data-config.xml文件需要注意一下pk的值







参考连接:

http://shiyanjun.cn/archives/444.html

http://blog.duteba.com/technology/article/70.htm

http://www.devnote.cn/article/89.html

http://qiaqia26.iyunv.com/blog/1004996

http://zzstudy.offcn.com/archives/8104

http://blog.csdn.net/duck_genuine/article/details/5426897

运维网声明 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-314649-1-1.html 上篇帖子: solr searching 过程解析 下篇帖子: 用Solr服务器建索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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