本文旨在探索基于Lucene的搜索架构问题,也就是怎么应用Lucene来构造一个应用于业务系统的搜索引擎框架的问题。
一直对做搜索有不少幻想,也曾尝试着自己小打小闹的搞过几个demo,前不久,这个机会来了,目前我们开发的系统业务数据在跨越千万级的门槛上了,主管和项目经理打起了搜索引擎的主意,我也主动请缨要来搞一下。
做过搜索的人都知道。对于使用Lucene做个简单的demo 很简单,只要把Lucene 包下载下来,网上看点资料应该很快就有效果的,但是应用于商业系统有很多的问题需要考虑:什么样的架构足够灵活,删除的数据怎么在索引中删除,同一时间有很大数据时会不会导致内存溢出,事务区的数据怎么办,索引数据是否要用缓存,业务框架和搜索服务的耦合度要多大,加字段是不是要重新建索引,在原有的搜索服务上提供新的搜索服务是不是足够方便等等。
一.概要设计阶段:
开始我们思路也不是很开阔,虽然有两个搜索框架可以参考,但是过早的陷入了细节,幸亏项目经理还是比较会梳理问题,虽然他也不是太懂搜索,但他提供了解决问题的思路,让我们从几个大的方面进行思考,我们在对原有两个框架研究的基础上展开思路,主要思考成果如下:
DMP搜索引擎模块概略设计
|
架构A
|
架构B
|
实现思路
|
问题
|
索引任务启动和关闭
|
当有两个以上索引任务时,可以停掉一个索引的任务,一个索引任务改造时,不影另外的任务
|
依附于服务器,Jboss启动时,任务启动,关闭时所有的任务都关闭。
|
Spring配置Schedule。把两个任务都加进去,依赖于jboss服务器
|
|
配置方式
|
配置非常灵活,但是加一套索引的时候,要加建索引,Dao与Document转化,shell脚本重新搞一遍。
|
Index. Properties可以非常灵活的配置某个字段的分词器等,可以满足个性化的查询需求。
|
1.很容易的扩展任务。 2.容易扩展业务 3.支持索引列的配置 4. 基于xml,不使用Spring bean的配置。【详细1】
|
|
数据扫描
|
|
删除任务时向任务表插入记录,不考虑大数据量变更时,修改时间一致导致的内存溢出等问题。
|
1.限制时间来取数据,采用步长的增量式取数据 2.注意补偿时间 3.任务可以配置在某台服务器上跑
|
1.大数据量,较多数据同一修改时间的解决
2.第一次跑数据时时间非常长。
|
索引建立和优化
|
使用indexWriter对象的三级缓存cache,采用线程池的方式。
|
使用RAM的内存目录,最后刷新到硬盘。有很多indexWriter使用cache
|
1.需要使用cache,不使用cache每次从硬盘读数据非常耗费性能 2.采用线程池方式写索引。3.不用RAM
|
CacheIndexWriter在使用时,四个参数是否需要优化,怎么优化。
|
业务集成(搜索客户端和服务端的调用关系)
|
|
|
将查询条件,放到Map里面,传输的实体都是java内建对象,任何业务端查询都不需要修改条件实体,业务端进行Map到DO的转化,搜索引擎端没有POJO
|
|
查询组件
|
|
|
1.查询端封装condition的like equal等条件2.业务搜索端提供搜索的service封装对于hessian的应用和条件的构造。3.搜索引擎采用根据条件进行组合和查询。
|
|
分词
|
只能配置一个分词方式
|
可以自定义分词方式,每个字段各不相同。
|
参考架构B实现,可以灵活配置的分词方式。
|
对于like的实现,目前考虑采用WizardFiter进行二次过滤,实现通配符搜索,寻找下分字母的解决方案。由于这种中文夹英文的情况较少,不考虑分词带来的效率。
|
缓存
|
|
|
1.Hit内部的缓存最大值支持每次取200条数据到缓存,多余了则清空 ,可以调整这个值。2.其它地方不使用缓存。
|
|
Hessian接口提供
|
提供基于内置jetty web服务器的hessian服务
|
用http-invoker发布的服务,序列化机制基于Spring,只能支持基于Spring的客户端平台
|
绑定JBOSS提供接口,Spring内配置。
|
|
备注:
【详细1】:xml格式配置,
1. 字段索引建立类型。
2. 扫描的频率
3. 取数据sql
4. 索引目录
5. 跑不跑任务,跑哪种类型。
二.搜索模块架构设计
搜索模块主要基于如下考虑:索引和搜索的服务器都是单端的,采用hessian发布的服务可以提供给任何外部系统使用, 还有上面提到的,采用java内建对象,map,set等作为传输实体的参数,可以降低耦合,也不存在序列化跟平台有关的问题,主要架构如下:
主要设计还是看附件,刚才csdn转战到javaeye
------------------文章太长-------------------未完待续------------------------------------
- 大小: 112.1 KB
分享到:
相关推荐
【基于Java的全文索引检索引擎——Lucene】 Lucene是一个用Java编写的开源全文检索引擎库,由Doug Cutting创建并贡献给Apache基金会,成为Jakarta项目的一部分,后来成为Apache软件基金会下的顶级项目。它的主要...
综上所述,车险系统架构的实现是一个复杂的系统工程,需要在满足业务需求的基础上,对产品管理、规则引擎、保单管理、理赔流程等多个方面进行设计和优化,并合理使用现代信息技术以保证系统的高效、安全和可扩展。
本项目——“基于Lucene的Web站内信息搜索系统”正是利用Lucene的优秀特性,构建了一个能够在Web环境中实现高效站内搜索的应用。 一、Lucene基础 Lucene是Java编写的,它的主要功能包括文档索引、搜索以及相关的...
在这个毕业设计项目中,ASP.NET被用来构建一个基于Ajax(Asynchronous JavaScript and XML)和Lucene的搜索引擎,展示了ASP.NET在实现高效、交互性强的Web应用上的能力。 Ajax是一种在不刷新整个网页的情况下更新...
《开发自己的搜索引擎——Lucene+Heritrix》是一本深入探讨如何构建自定义搜索引擎的书籍,结合了Apache Lucene和Heritrix两个强大的开源工具。Lucene是Java开发的全文检索库,而Heritrix则是一款功能丰富的网络爬虫...
**搜易站内搜索引擎——基于Lucene的.NET全 文检索 解决方案** 搜易站内搜索引擎是一款专为.NET平台设计的、基于Apache Lucene库的免费站内搜索工具。它提供了一种高效、准确的全文检索功能,为网站或应用程序的...
为了解决这一问题,研究者们深入分析和研究了Lucene的索引机制,并提出了基于内存缓冲区建立索引文件的分布式并行索引技术,这是一种可扩展的搜索引擎解决方案。通过这种技术,可以在多台机器上分布式地建立索引,并...
Java搜索工具——Lucene实例总结(一) Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它是开源的Java库,可以方便地在应用程序中实现强大的搜索功能。这篇博客将对Lucene的基本使用进行实例总结,...
这篇资料——"ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)",提供了一种使用ASP.NET技术结合Ajax和Lucene库来创建搜索引擎的实践方法。下面将详细阐述这个设计与实现过程中的核心知识点。 首先,...
《Lucene原理与代码分析》深入探讨了Lucene——一款高性能、全功能的文本搜索引擎库——的核心机制与实现细节。本书不仅提供了理论上的全面解析,还辅以丰富的代码实例,帮助读者从源码层面理解Lucene的工作流程。...
1. 分布式搜索(Solr):Apache Solr基于Lucene,提供分布式、集群化搜索解决方案,适合大型企业级应用。 2. 高亮显示(Highlighting):突出显示搜索结果中匹配的关键词,增强用户体验。 3. 近实时搜索(Near Real-...
这里我们关注的是基于开源项目Lucene 2.0和Heritrix的一本书——《开发自己的搜索引擎》的源码资料。Lucene是一个高性能、全文本搜索库,而Heritrix则是一个强大的网页抓取工具,它们共同构成了搜索引擎的基础架构。...
总结,Lucene 3.0.3作为一款开源的全文检索库,其源码的深入研究有助于开发者掌握全文搜索的核心技术,提高开发效率,构建更高效、更个性化的搜索引擎。通过对源码的分析,我们不仅可以学习到搜索引擎的基本原理,还...
作为一款Java实现的全文搜索引擎架构,Lucene 提供了完整的索引和查询引擎,使得开发者能够快速、有效地在大量数据中进行文本搜索。 ### Lucene 的核心组件 1. **索引(Indexing)**: Lucene 的索引过程将文档内容...
- **通用搜索应用架构:** Lucene的设计考虑到了通用搜索应用的架构需求,包括索引创建、文档存储、查询处理等多个方面。 - **基本索引API:** Lucene提供了基础的索引API,用于创建索引并添加文档到索引中。这些API...
本文将深入探讨基于Java的开源搜索引擎框架——Lucene和Nutch,以及如何通过源码学习它们的开发实践。 Lucene是一个全文检索库,它提供了一个简单的API,开发者可以使用这些API来构建自己的搜索功能。Lucene的核心...
《Lucene搜索引擎开发权威经典》是一本深入探讨搜索引擎技术的专著,主要聚焦于开源的全文检索库——Apache Lucene。这本书是学习和理解搜索引擎工作原理以及如何利用Lucene进行开发的重要参考资料。Lucene是一个高...
### 基于Java技术的搜索引擎研究与实现 #### 摘要解析 该硕士学位论文主要探讨了基于Java技术的搜索引擎的研究与实现方法。随着互联网的快速发展,网络上的信息资源呈爆炸性增长,如何准确、快速地从海量信息中...