紧接上篇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&characterEncoding=utf8&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&characterEncoding=utf8&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 > '${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.iteye.com/blog/1004996
http://zzstudy.offcn.com/archives/8104
http://blog.csdn.net/duck_genuine/article/details/5426897
分享到:
相关推荐
solr服务开启、停止、重启: cd到solr的bin目录 ./solr start | restart | stop -force ./solr start -p 9923 -force ./solr stop -p 9923 -force ...solr 全量数据迁移方法:(数据结构及数据全部迁移出来了
solr创建索引并查询,希望能够帮助有需要的人。。。
Solr数据库插入(全量和增量)索引,全量一般用于第一次创建索引情况,批量一般更新数据部分创建索引。
solr初学者很受用的!讲解了solr怎么创建索引的及其原理,以及查询
索引是设计表的一部分,创建的索引对sql的语句木有任何影响,对sql语句的执行效率有影响
solr定时索引(增量索引、完整索引)需要用到的jar包和配置 支持7.3版本
包含solr介绍、全局索引介绍、ik分词器安装包、solr安装包、及各个部分的安装教程。
solr增量导入更新索引包
Solr 索引 测试报告 性能
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
在tomcat中配置solr,以及solr 全文搜索建立索引的相关方法总结
NULL 博文链接:https://yangjayup.iteye.com/blog/1773636
NULL 博文链接:https://dacoolbaby.iteye.com/blog/2105246
Weiz.Solr 开发使用一些源码,如何使用检索查询。C#项目映入
NULL 博文链接:https://takeme.iteye.com/blog/1849781
NULL 博文链接:https://stranger2008.iteye.com/blog/1812721
Solr接受xml格式数据更新、提交、修改索引。
solr配置中文解析器和将数据导入solr索引库时所需的jar包
主要介绍了java多线程处理执行solr创建索引示例,需要的朋友可以参考下