`
dingjob
  • 浏览: 183636 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

基于Lucene的商业搜索应用架构研究(上)——架构设计

阅读更多

    本文旨在探索基于Lucene的搜索架构问题,也就是怎么应用Lucene来构造一个应用于业务系统的搜索引擎框架的问题。

    一直对做搜索有不少幻想,也曾尝试着自己小打小闹的搞过几个demo,前不久,这个机会来了,目前我们开发的系统业务数据在跨越千万级的门槛上了,主管和项目经理打起了搜索引擎的主意,我也主动请缨要来搞一下。

   

    做过搜索的人都知道。对于使用Lucene做个简单的demo 很简单,只要把Lucene 包下载下来,网上看点资料应该很快就有效果的,但是应用于商业系统有很多的问题需要考虑:什么样的架构足够灵活,删除的数据怎么在索引中删除,同一时间有很大数据时会不会导致内存溢出,事务区的数据怎么办,索引数据是否要用缓存,业务框架和搜索服务的耦合度要多大,加字段是不是要重新建索引,在原有的搜索服务上提供新的搜索服务是不是足够方便等等。

 

一.概要设计阶段:

 

    开始我们思路也不是很开阔,虽然有两个搜索框架可以参考,但是过早的陷入了细节,幸亏项目经理还是比较会梳理问题,虽然他也不是太懂搜索,但他提供了解决问题的思路,让我们从几个大的方面进行思考,我们在对原有两个框架研究的基础上展开思路,主要思考成果如下:

 

   

DMP搜索引擎模块概略设计

 

 

 

架构A

架构B

实现思路

问题

索引任务启动和关闭

当有两个以上索引任务时,可以停掉一个索引的任务,一个索引任务改造时,不影另外的任务

依附于服务器,Jboss启动时,任务启动,关闭时所有的任务都关闭。

Spring配置Schedule。把两个任务都加进去,依赖于jboss服务器

 

配置方式

配置非常灵活,但是加一套索引的时候,要加建索引,DaoDocument转化,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内建对象,任何业务端查询都不需要修改条件实体,业务端进行MapDO的转化,搜索引擎端没有POJO

 

查询组件

 

 

1.查询端封装conditionlike 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
1
0
分享到:
评论

相关推荐

    基于Java的全文索引检索引擎——Lucene

    【基于Java的全文索引检索引擎——Lucene】 Lucene是一个用Java编写的开源全文检索引擎库,由Doug Cutting创建并贡献给Apache基金会,成为Jakarta项目的一部分,后来成为Apache软件基金会下的顶级项目。它的主要...

    保险架构.pdf————电子版_pdf版

    综上所述,车险系统架构的实现是一个复杂的系统工程,需要在满足业务需求的基础上,对产品管理、规则引擎、保单管理、理赔流程等多个方面进行设计和优化,并合理使用现代信息技术以保证系统的高效、安全和可扩展。

    基于Lucene的Web站内信息搜索系统.rar

    本项目——“基于Lucene的Web站内信息搜索系统”正是利用Lucene的优秀特性,构建了一个能够在Web环境中实现高效站内搜索的应用。 一、Lucene基础 Lucene是Java编写的,它的主要功能包括文档索引、搜索以及相关的...

    ASP.NET毕业设计——ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文).zip

    在这个毕业设计项目中,ASP.NET被用来构建一个基于Ajax(Asynchronous JavaScript and XML)和Lucene的搜索引擎,展示了ASP.NET在实现高效、交互性强的Web应用上的能力。 Ajax是一种在不刷新整个网页的情况下更新...

    开发自己的搜索引擎——Lucene+Heritrix

    《开发自己的搜索引擎——Lucene+Heritrix》是一本深入探讨如何构建自定义搜索引擎的书籍,结合了Apache Lucene和Heritrix两个强大的开源工具。Lucene是Java开发的全文检索库,而Heritrix则是一款功能丰富的网络爬虫...

    搜易站内搜索引擎(基于Lucene开发的,.NET平台下免费的站内搜索)

    **搜易站内搜索引擎——基于Lucene的.NET全 文检索 解决方案** 搜易站内搜索引擎是一款专为.NET平台设计的、基于Apache Lucene库的免费站内搜索工具。它提供了一种高效、准确的全文检索功能,为网站或应用程序的...

    基于Lucene的分布式并行索引.pdf

    为了解决这一问题,研究者们深入分析和研究了Lucene的索引机制,并提出了基于内存缓冲区建立索引文件的分布式并行索引技术,这是一种可扩展的搜索引擎解决方案。通过这种技术,可以在多台机器上分布式地建立索引,并...

    Java搜索工具——Lucene实例总结(一)

    Java搜索工具——Lucene实例总结(一) Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它是开源的Java库,可以方便地在应用程序中实现强大的搜索功能。这篇博客将对Lucene的基本使用进行实例总结,...

    ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文).zip

    这篇资料——"ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)",提供了一种使用ASP.NET技术结合Ajax和Lucene库来创建搜索引擎的实践方法。下面将详细阐述这个设计与实现过程中的核心知识点。 首先,...

    Lucene 原理与代码分析完整版.pdf

    《Lucene原理与代码分析》深入探讨了Lucene——一款高性能、全功能的文本搜索引擎库——的核心机制与实现细节。本书不仅提供了理论上的全面解析,还辅以丰富的代码实例,帮助读者从源码层面理解Lucene的工作流程。...

    lucene文档,lucene相关文档

    1. 分布式搜索(Solr):Apache Solr基于Lucene,提供分布式、集群化搜索解决方案,适合大型企业级应用。 2. 高亮显示(Highlighting):突出显示搜索结果中匹配的关键词,增强用户体验。 3. 近实时搜索(Near Real-...

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    这里我们关注的是基于开源项目Lucene 2.0和Heritrix的一本书——《开发自己的搜索引擎》的源码资料。Lucene是一个高性能、全文本搜索库,而Heritrix则是一个强大的网页抓取工具,它们共同构成了搜索引擎的基础架构。...

    lucene-3.0.3-src.zip

    总结,Lucene 3.0.3作为一款开源的全文检索库,其源码的深入研究有助于开发者掌握全文搜索的核心技术,提高开发效率,构建更高效、更个性化的搜索引擎。通过对源码的分析,我们不仅可以学习到搜索引擎的基本原理,还...

    Lucene源码

    作为一款Java实现的全文搜索引擎架构,Lucene 提供了完整的索引和查询引擎,使得开发者能够快速、有效地在大量数据中进行文本搜索。 ### Lucene 的核心组件 1. **索引(Indexing)**: Lucene 的索引过程将文档内容...

    lucene in action第二版下载

    - **通用搜索应用架构:** Lucene的设计考虑到了通用搜索应用的架构需求,包括索引创建、文档存储、查询处理等多个方面。 - **基本索引API:** Lucene提供了基础的索引API,用于创建索引并添加文档到索引中。这些API...

    Lucene nutch 搜索引擎 开发 实例 源码

    本文将深入探讨基于Java的开源搜索引擎框架——Lucene和Nutch,以及如何通过源码学习它们的开发实践。 Lucene是一个全文检索库,它提供了一个简单的API,开发者可以使用这些API来构建自己的搜索功能。Lucene的核心...

    Lucene搜索引擎开发权威经典

    《Lucene搜索引擎开发权威经典》是一本深入探讨搜索引擎技术的专著,主要聚焦于开源的全文检索库——Apache Lucene。这本书是学习和理解搜索引擎工作原理以及如何利用Lucene进行开发的重要参考资料。Lucene是一个高...

    基于Java技术的搜索引擎研究与实现.pdf

    ### 基于Java技术的搜索引擎研究与实现 #### 摘要解析 该硕士学位论文主要探讨了基于Java技术的搜索引擎的研究与实现方法。随着互联网的快速发展,网络上的信息资源呈爆炸性增长,如何准确、快速地从海量信息中...

Global site tag (gtag.js) - Google Analytics