一个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/    这个网站很具体做项目的经验,特别提出了一些对电商项目方面的检索解决方案。。

时间: 2024-08-29 17:16:25

一个solr(MultiCore)的搜索项目的应用的相关文章

利用SOLR搭建企业搜索平台 之——MultiCore

Solr Multicore 是 solr 1.3 的新特性.其目是一个solr实例,可以有多个搜索应用. 下面着手来将solr给出的一个example跑出来.这篇文章是基于<利用SOLR搭建企业搜索平台 之——运行solr>,有不明白的请参见http://lianj-lee.javaeye.com/blog/424383 1. 找到solr下载包中的example文件夹,在它的下面有个multicore文件夹,将这个文件夹下面的所有东西copy到 c:/solr-tomcat/solr下面.

分布式高维空间近邻搜索项目开发

项目名称 分布式高维空间近邻搜索 项目描写叙述 眼下在互联网上高维空间搜索的算法非常多,但性能都不尽人意.比方KD树算法,强调互联网,是指本人能在互联网上搜索到的相关算法,假设某个公司内部有自己研究的算法也可能有不错的性能表现. 測试KD树的性能,50维度的数据,100万的数据用了600多毫秒,并且搜索结果与线性搜索的结果相差还非常大.鉴于此,我自己研究了一个搜索算法.64维度,100万的数据量,搜索前十个近期邻点,大概在200毫秒左右(PS:通过修正bug,算法在此环境中达到了20ms以内搜索

利用SOLR搭建企业搜索平台 之——模式配置Schema.xml

来源:http://blog.csdn.net/awj3584/article/details/16963525 schema.xml这个配置文件可以在你下载solr包的安装解压目录的\solr\example\solr\collection1\conf中找到,它就是solr模式关联的文件.打开这个配置文件,你会发现有详细的注释.模式组织主要分为三个重要配置 1. types 部分 是一些常见的可重用定义,定义了 Solr(和 Lucene)如何处理 Field.也就是添加到索引中的xml文件属

github 项目搜索技巧-让你更高效精准地搜索项目

目录 github 搜索技巧 案例 普通搜 搭配技巧搜 限定词 查找某个用户或组织的项目 辅助限定词 还没搞懂的(关于 forks.mirror.issues) 排序(放的是官网的链接) 使用指南 练习案例 github 搜索技巧 参考自 B站 up 主 CodeSheep 的视频[如何高效地在网上找开源项目做!在职程序员实际演示一波视频教程操作],然后写着写着一好奇就去看文档了 现在这篇博客相当于官方文档的翻译版?? 当然,你也可以去看[官方文档]体验原汁原味的教程 干啥的?相当于给搜索结果添

一个简单的java web 项目

本文实现一个简单的 java web 项目,包括以下5个功能: 1. 登录 用户默认主页index.jsp , 可选择登录功能,输入用户名和密码,若登录成功,则进入产品管理总页面main.jsp.若不成功仍退回index.jsp 2. 注册 用户默认主页index.jsp ,  可选择注册功能 ,若注册,则进入 register.jsp 3. 管理产品(增加,删除,查看) 登录成功后,进入产品管理总页面main.jsp.第一次进入main.jsp,默认显示所有产品列表.在此页面上更实现 查询某个

准备开一个地图SDK的开源项目

最近有点空闲时间了, 准备开一个地图SDK的开源项目, 现在的地图SDK已经有很多了, 再做一个跟重新发明个轮子差不多, 但还想做的原因是想在别的轮子的基础上造个轮子... 初步设想是基于开源的地图渲染引擎tangram-es进行二次开发, 使用Qt5.7进行二次封装, 提供QWidget和QML两种接口 项目地址: https://github.com/tiangles/ltdmap 支持平台: linux gcc 32/64 bits, arm/x86, 未来打算移植到QNX和win32,

一个jetty部署多个项目配置之方法

一个jetty部署多个项目配置之方法 原文地址:http://my.oschina.net/wangyongqing/blog/115647 Jetty用户经常想配置他们的web应用到不同的虚拟主机. 通常情况下,一个单一的IP地址的机器有不同的DNS解析名与它相关联的,部署在这个机器上的web应用必须能够通过这些关联的DNS解析名访问到. Another possibility is to serve different web applications from different virt

配合m2eclipse创建一个标准的maven web项目

1.maven安装 首先下载maven3. 解压后设置maven的系统变量. 如下图.设置好M2_HOME和PATH的系统变量.输入  Java代码   mvn -version ------------------------------------------------------------------------------------------ 2.安装m2eclipse插件 m2eclipse Core Update Site: http://m2eclipse.sonatype

利用SOLR搭建企业搜索平台 之——运行solr

 1. 首先下载好solr,我用的是 solr1.3,下载地址: windows版本 http://labs.xiaonei.com/apache-m ... ache-solr-1.3.0.zip  linux版本 http://labs.xiaonei.com/apache-m ... ache-solr-1.3.0.tgz  2. 准备运行容器,我用的是tomcat6.0.20.如果是玩的话,也可以不用准 备专门的容易,你只需解压好solr的下载包,找到 example文件夹,然后运行 s

如何创建一个基于Maven的SmartGWT项目

如何创建一个基于Maven的SmartGWT项目 使用环境 Eclipse的版本为:Luna Service Release 2 (4.4.2)(这个其实不是很重要,你完全可以使用最新版本的Eclipse或者MyEclipse) Maven的版本为:3.1.0 SmartGWT的版本为:6.0p GWT的SDK版本为:2.7 前提准备 你需要安装Maven.如何安装Maven不是文本的内容,你可以参考我的关于Maven的博客. 把SmartGWT的jar包上传到私服服务器. 操作过程 创建GWT