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

[经验分享] 一个solr(MultiCore)的搜索项目的应用

[复制链接]

尚未签到

发表于 2015-11-12 08:16:29 | 显示全部楼层 |阅读模式
功能实现:

一:项目启动之后,自动监视所有数据模型,所查询出来的数据。创建索引

二:实现动态的自动更新增量数据索引和维护索引。





    这是基于数据模型下构建索引的一个项目,耦合度低、可扩展性高。。不同于一般的带有业务性质全文检索项目。比如:常见电商的B2B、B2C
类等搜索引擎系统。这一类系统一般在有业务操作(对数据库表增删改查)的情景下,同时对索引信息进行相应的操作。 这个项目。。。只针对于

据,不针对于任何业务,能动态的实现各种数据模型下的数据 的增量和维护的索引。能管理不同项目的所产生数据模型。



    项目采用了solr中多核MultiCore。。思路为:每一个 solrcore 就对应一个数据模型scheme,项目启动之后,针对内存中scheme数据模型,

过这个scheme中的最后的update,add时间和scheme中定时任务(每隔多少时间去监听数据库中的数据增量和维护量),去数据库中监听数据得

到所需要的数据之后。对其构建索引(索引异常状态,记录日志)。。



整个项目实现,分为2个部分:



管理数据模型(scheme)部分

       一、配置管理数据源、表:管理所需远程连接数据库中的表信息。

       二、配置管理数据模型:管理所有scheme作业(数据来源sql,主键信息,字段配置信息,字段存 储、索引、权重,分词,add字段,

update字 段,定时任 务,批次抓取数据量,抓取数据频率,请求服务器信息等等。) ----->这里注意:如果涉及到一对多的多表查询的情况,

必须配置两个主键。服务器会自动组合成一个新的联合主键,必 须保证schema.xml中的uniqueKey的唯一性,否则丢失数据。。solr文档

uniqueKey不同于lucene的scores.doc。或者 采用nosql数据库中的冗余写法。

       三、管理和监听异常数据:监听异常数据日志。

这部分就不详细介绍了。。想做简单也可以,做复杂也行。


构建索引部分(详细介绍):



一:服务器初始化。。

1:加载所有scheme配置方案。 ---->在WebApplicationContext中启动。

            1.1---通过ip 端口  服务名 去获取其所有有效配置的索引方案List<Scheme>。

            1.2---把数据来源sql,主键信息,字段配置信息,字段存储、索引、权重,分词,检索方案,add字段,update字段,抓取数据量,

抓取数据频率,请求服务器信息等等 等。组装成scheme对象。

            1.3---把获取的索引方案List<Scheme> 以单例模式加载到内存中


2:在服务器生成对应的solr所有相关配置文件

            2.1---构建solr.ftl,solrconfig.ftl,schema.ftl模版          -------->根据自身业务需求

             DSC0000.jpg

            2.2---循环所有List<Scheme>,调用freemarker模版引擎。

            2.3---用freemarker模版生成不同scheme所需要的solr.xml,solrconfig.xml,schema.xml,solrserver.xml(httpSolrServer的参

数信息),注意加载顺序。solr启动会自动扫描这些配置文件才能正常启动的。参照我以前的一篇博客

http://blog.iyunv.com/hu948162999/article/details/39891493


二:执行scheme作业。


1:用Quartz进行作业调度,执行scheme作业

          3.1---激活相应的定时任务。

          3.2---获取当前批量数据中最大的insert时间和update时间。------和scheme方案比较

          3.3---获取增量数据并与scheme作业的批处理数据量比较。计算其执行批次数。

          3.4---启动线程池,来获取每一批查询的结果集,并批次创建索引集。

          3.5---日志全程记录跟踪其索引信息创建跟新情况,以及索引异常情况。   ---------->用于数据管理模型部分

          3.2---定时作业完成,记录和修改scheme作业中的最新insert和update时间。

分词器两种:

     ICTCLAS :老版本项目的是采用一款中科院的C语言开发的分词器ICTCLAS (汉语词法分析系统),这玩意不的不说确实做的很强大,吐槽

一下:由于库里面可能存在很奇葩&#26684;式的数据,ICTCLAS处理这种形式存在的数据时, 报错。直接停止web 容器。。

     改造了mmseg分词器,加上了同义词处理 (这还好,无法识别的话,抛出异常,不会停止tomcat服务器),可在模型管理模块中选择这2种

分词器。。新版本的这个项目使用这个分词器。  


这是一套全文检索系统,本来分为3个系统。数据模型系统、数据索引系统、业务项目系统中的搜索部分。

至于 搜索部分的具体实现,参照我的下篇博客。

推荐部分下载资源:

很经典算法书:http://download.iyunv.com/detail/hu948162999/8262987;

关于设计模式的书:大话设计模式(资源太大,上传不了);

还有转载一个朋友写的关于java JVM内存管理的博文:http://blog.iyunv.com/hu948162999/article/details/41948599  ---->这个项目比较吃内存。










  

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-138098-1-1.html 上篇帖子: solr启动时报错java.nio.channels.OverlappingFileLockException 下篇帖子: solr中SearchComponent(查询组件)及其自定义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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