首页 > 代码库 > 一个solr(MultiCore)的搜索项目的应用

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

功能实现:

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

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


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

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

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

 

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

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

要的数据之后。对其构建索引(索引异常状态,记录日志)。。由于solr实现了lucene的基于http级的接口,不需要考虑lucene的近实时搜索相关的什

么NRTManager等问题。solr的CommonsHttpSolrServer(4.0之后改为HttpSolrServer)。如果不考虑HTTP请求延迟的话,完全可以取代lucene。而且

CommonsHttpSolrServer这个类是线程安全的。 


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


管理数据模型(scheme)部分:一、配置管理数据源、表:管理所需远程连接数据库中的表信息。

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

分词,add字段, update字 段,定时任 务,批次抓取数据量,抓取数据频率,请求服务器信息等等。)

         ----->这里注意:如果涉及到一对多的多表查询的情况,必须配置两个主键。服务器会自动组合成一个新的联合主键,必 须保证schema.xml

中的 uniqueKey的唯一性,否则丢失数据。。solr文档uniqueKey不同于lucene的scores[i].doc。

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

 

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

 

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


一:服务器初始化。。


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   ---->这个项目比较吃内存。


 

个人推荐一个网站:solr中国http://www.solr.cc/blog/    这个网站很具体做项目的经验,特别提出了一些对电商项目方面的检索解决方案。。

 

 

 

 

 

 

 

 

 

 

 


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