`
huangfoxAgain
  • 浏览: 37168 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

研讨如何进行Lucene的分布式应用【转】

阅读更多
提问:

  现在有个项目,有10台服务器,每台服务器负责某一部分的index。另外有一台web服务器,它可以根据用户提交的查询请求到特定的服务器上进行查找。比如用户提交查询A,根据index的分配情况,可以将查询请求分发给服务器a来负责,而用户提交查询请求 B,则将它提交给服务器b来负责。不知lucene目前的index机制和search机制是否能够支持这种需求?


  

  回答:

  1. 目前lucene的机制不支持这种需求

  2. 你可以很容易的扩展lucene,从而满足你的需求.

  实际上,你这是涉及到 indexing的分布式存储的问题, 涉及到结构, 传输,等等.

  所以,你必须要设计一个robust的分布式index结构,然后再考虑如何实现.不要一开始就拿一个开源的lucene就上.

  google当然是分布式的索引. 只不过这个分布式可能不是你想象中的那么神秘.

  
  提问:

  刚才看了一下lucene的index结构,感觉不需要对index进行修改,比如 10台检索服务器,每个服务器负责一个网站的crawl以及index。然后我的web服务器将用户的query广播到10台检索服务器去,10台服务器同时进行搜索(用lucene的api),然后每台服务器将最符合的topN条记录发送回web服务器,web服务器再对这topN×10条记录进行重新排序,取最前面的topN条记录就行了。

  你觉得我这种方法可行吗?

  我觉得这种方法的缺点在于web服务器和检索服务器之间的通讯量问题:

  1、首先要对10个服务器进行广播查询,有没有方法可以根据query的情况,能够确定对某台服务器查询?感觉这确实要对index进行分布式的存储,但是如何进行分布式存储呢?按照term进行分布式存储肯定不行,因为对单一的term进行查询,返回的文档肯定很多(按照lucene里面的算法),难道按照term vector来分布式存储?好像lucene不太支持这个吧。

  2、其次,每台检索服务器都返回了topN条结果,这好像比较浪费,有没有什么办法让它返回少点,同时又不影响结果?


  回答:

  你的这个结构理论上是可以的,不过有一点:

  按照你目前的应用规模,你的索引完全可以放在一台机器上。

  为什么要分开10台机器存储?

  集中在一台机器上,就没有检索的时候,通讯量的这个问题了。

  如果你真的是想要分开,就要涉及到分布式索引,和索引之间的通讯压缩的问题,这个也是你提到的困惑,我觉得如果你不是专业SE,你最好绕过这个技术难点。

  现在的版本已经有进度显示,以及支持索引更新。至于与Jxta有一个based On grid的distributed fulltext search项目的区别,我们目前还没有做过比较,呵呵。distributed search项目意在于提供多个节点之间架构一个平台提供有效的资源查找与资源共享方式。该项目采用lucene(http://lucene.apache.org)开放源项目作为底层的搜索引擎,采用网格技术实现分布式机制。

  为什么非要扯上“分布”去?

  我看了半天,还不是太理解你的问题,就我目前的了解,似乎是两种情况。

  1、检索的负载大,想用多台服务器分散检索的压力。(相对的,全文内容的更新相对压力较小,可以集中用一台高性能服务器来处理全文内容的更新)

  由于lucene是基于文件的,实现起来比较方便一些。你可以使用NAS做为你的存储,或者是直接采用廉价的同步复制方案(比如rsyncd)。

  比如10台服务器,用一台处理全文内容更新,另外9台对外提供检索。当全文内容更新后,通过rsyncd这样的同步复制,把更新后的内容同步到9台检索服务器去,供用户检索。

  至于负载,10台服务器都有了,再花几万块钱买台均衡交换机(比如aleton)也没有太大难处吧?

  2、检索压力小,全文内容的更新量大。

  在单台服务器下面,可能就是表现在你的全文库分散在不同的目录下面(比如/full/app1、/full/app2.。),想检索的时候能检索所有的全文记录,而不是某一目录(比如/full/app1),是否?

  也就是说,你希望用9台服务器来处理全文的增加,比如一台服务器对应一个应用。如果采用NAS(或是其它高速的存储解决方案),或是rsyncd这类同步复制,在任何一个全文服务器有更新后,及时的把这台的更新内容同步到用于检索的10服务器上。

  在检索的这台服务器上,如同单一服务器一样,同步后的数据按服务器存储在不同目录下,而lucene检索时,好象它的api是支持多目录检索的。

  另:

  我觉得你的需求,实际上没有必要扯到“分布”上面去,如果能在存储上花点功夫,比如选择一个比较好的统一存储方案,或是实现存储的“主--镜像”同步复制,也许就不是问题了。

  对于存储引出来的传输性能问题,你可以在构建网络的时候考虑一下,比如在每个服务器上多加网卡,用光口或是GE口构建一个专门的“传输网络”,避免与“业务网络”、“管理网络”这类塞车,在传输上的问题应该影响不大。

  我做的分布式lucene搜索,可以把数据源分时间建到不同机器上,每台机器做个seachserver,web服务器同时向各个 seachserver发送请求,10台seachserver同时查询,返回查询条数再从最近的索引库返回结果,翻页的话判断每个每台 seacherserver的条数,以时间最近的机器返回结果!
分享到:
评论

相关推荐

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

    分布式并行索引技术基于Lucene是在搜索引擎领域中的一项重要进步。随着网络技术的不断进步,互联网资源日益丰富,搜索引擎在信息检索中扮演着越来越重要的角色。搜索引擎的高效运作依赖于其核心组件——索引技术。一...

    lucene排序、设置权重、优化、分布式搜索.pdf

    例如,下面的代码演示如何使用 Lucene 对分布式搜索结果进行聚合: ```csharp DistributedSearch distributedSearch = new DistributedSearch(); distributedSearch.AddIndex(directory); ``` 在上面的代码中,...

    基于Lucene的分布式搜索设计说明书

    **基于 Lucene 的分布式搜索设计说明书** 在当前的互联网环境中,海量数据的处理与检索成为了一个重要的挑战。Apache Lucene 是一个高性能、全文本搜索库,它为开发人员提供了强大的文本搜索功能。然而,单个 ...

    lucene的应用程序扩展

    **Lucene 应用程序扩展在 ASP.NET 中的实践与应用** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用程序,包括网站、数据库和文档管理。在 ASP.NET ...

    lucene高级应用

    《Lucene高级应用详解》 在信息技术领域,搜索引擎技术是数据检索的重要手段,而Apache Lucene作为开源全文搜索引擎库,以其高效、灵活的特点被广泛应用于各类项目中。本篇文章将深入探讨Lucene的高级应用,结合...

    Java全文检索引擎Lucene的应用.pdf

    尽管Lucene本身并不是一个完整的全文索引应用程序,但它提供了一套完整的查询引擎和索引引擎,实现了一些通用的分词算法,并预留了许多词法分析器接口,使得用户可以根据自己的需求进行扩展。此外,由于Lucene是用...

    分布式全文检索技术的研究及应用.pdf

    为了解决这些问题,本文提出了一种基于Zookeeper的分布式服务协调模型,同时结合了Lucene搜索引擎和BM25F算法,并对算法进行了优化,以适应分布式环境下的全文检索需求。 Zookeeper是一个为分布式系统提供服务协调...

    用 Lucene 加速 Web 搜索应用程序的开发

    学习如何利用Lucene的分布式搜索框架如Solr或Elasticsearch进行集群部署,以实现大规模数据的高效检索。 8. **错误处理与调试:** 在集成Lucene到Web应用中,可能会遇到各种问题,比如索引损坏、查询错误等。了解...

    Lucene在web项目中的应用

    **Lucene在Web项目中的应用** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,它提供了完整的搜索解决方案,包括索引构建、搜索功能以及分词处理。在Java Web项目中,Lucene能够帮助开发者实现高效、...

    基于Lucene的搜索引擎的研究与应用

    文章主要研究和应用了基于Lucene的搜索引擎,其特点是利用开源网络爬虫工具抓取互联网信息,并通过Lucene的API对特定信息进行索引和搜索。下面详细介绍相关知识点。 1. Lucene基础 Lucene是由Apache软件基金会提供...

    Lucene简单应用

    ### Lucene简单应用知识点概述 #### 一、Lucene简介 - **搜索引擎的历史**:从最早的Archie和Gopher开始,到Robot(网络机器人)和Spider(网络爬虫)的出现,再到Excite、Galaxy、Yahoo等搜索引擎的发展,直至...

    lucene 3.4基本应用

    **Lucene 3.4 基本应用详解** Lucene 是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了高效、可扩展的搜索功能,被广泛应用于各种信息检索系统。本篇文章将深入探讨Lucene 3.4版本的基础应用,...

    Lucene4.6实战应用

    在实际应用中,Lucene可以与各种工具结合,例如Solr,它是在Lucene基础上构建的一个企业级搜索平台,提供了更高级别的服务,如分布式搜索、近实时搜索和多租户能力。另外,Elasticsearch也是基于Lucene构建的全文...

    基于文本聚类与分布式Lucene的知识检索.pdf

    随着信息技术的迅速发展,非结构化知识呈现爆炸性增长,...在未来的应用中,这种基于文本聚类与分布式Lucene的知识检索技术,有望在大数据环境下得到更广泛的应用,为非结构化知识的管理和检索提供更加高效的技术支持。

    lucene的实际应用案例

    本案例"lucene的实际应用案例"主要关注如何利用Lucene来创建和管理索引,以便在大量文本数据中进行高效搜索。 在Lucene中,索引是搜索的核心。索引过程主要包括以下几个步骤: 1. **创建索引**: 首先,你需要读取...

    lumongo:使用Lucene和MongoDB进行分布式实时搜索

    使用Lucene进行分布式实时搜索 LuMongo是基于Lucene的实时分布式搜索和存储系统。 LuMongo从头开始设计,可以在服务器之间垂直和水平扩展。 LuMongo将Lucene索引直接存储到MongoDB中。 文档可以本地存储在MongoDB中...

Global site tag (gtag.js) - Google Analytics