首页 > 代码库 > 一个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)的搜索项目的应用