一个solr(MultiCore)的搜索项目的应用

功能实现:

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

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


这是基于数据模型下构建索引的一个项目,耦合度低、可扩展性高。。不同于一般的带有业务性质全文检索项目。比如:常见电商的B2B、B2C

类等搜索引擎系统。这一类系统一般在有业务操作(对数据库表增删改查)的情景下,同时对索引信息进行相应的操作。这个项目。。。只针对于

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

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

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

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


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


管理数据模型(scheme)部分

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

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

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

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

uniqueKey不同于lucene的scores[i].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模版 -------->根据自身业务需求

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

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

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

http://blog.csdn.net/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 (汉语词法分析系统),这玩意不的不说确实做的很强大,吐槽

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

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

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

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

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

推荐部分下载资源:

很经典算法书:http://download.csdn.net/detail/hu948162999/8262987

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值