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

solr-wiki----solr分布式索引

    博客分类:
  • solr
阅读更多

What is Distributed Search?

         当一个索引越来越大,达到一个单一的系统无法满足磁盘需求的时候,或者一次简单的查询实在要耗费很多的时间的时候,我们就可以使用solr的分布式索引了。在分布式索引中,原来的大索引,将会分成多个小索引(索引并不定规模小,之前称之为小索引相对于之前的整个索引来讲的),solr可以将从这些小索引返回的结果合并,然后返回给客户端。

        

         如果当前的solr查询请求能够很快被处理,而你只是希望整个搜索系统的处理能力,那么你可以看看这篇文章http://wiki.apache.org/solr/CollectionDistribution

         

 Distributed Searching

          参数“shards”能够使请求被分发到shards所指定的小索引上。

          shards 的格式  :host:port/base_url[,host:port/base_url]*

          目前只有查询请求才能够被分发。能够处理这种要求分发的请求的组件包括standard request handler 、以及它的子类、任何使用 支持分发的组件的其他handler。

 

           目前支持分布式查询的组件有:

  •     查询组件-----根据一个请求返回一个文档集。
  •     面查询组件-----目前只支持排序的数字类的域。solr1.4将可以支持字符类型的域
  •     高亮显示组件
  •     debug组件。

           对于分布式搜索组件,你也可以参考   WritingDistributedSearchComponents

  

Distributed Searching Limitations

  •     索引的文档必须有一个 唯一键
  •     当拥有相同的id的文档被查询到时,solr将选择第一个文档。其他的结果将被丢弃。
  •     No distributed idf
  •     不支持“竞价排名”组件 QueryElevationComponent
  •      在处理的过程中,也即是 stage过程中,索引是有可能发生变化的。这样在索引更新的时刻,可能会发现搜索的结果跟索引不匹配的现象。
  •     目前并不支持 时间类型的 facetting搜索。(将在solr1.4被支持)
  •     目前只支持 能够排序的域的 facet搜索
  •      shard 的数量会受到get请求的方法的限制,大多数的web 服务器,只支持4000个字符左右的get请求。
  •     当“start”这个参数很大的时候,效率比较低下。举个例子,你发起一个请求,参数start=50000 ,rows=25 .被请求的索引的每个shard有500,000个文档。这时候,就会导致500,000条记录,在网络上被传输。

Distributed Deadlock

       每个小索引,都有可能既接收顶级的 查询请求,也 向其他的小索引发出次级的查询请求。在这里,你就要小心了,http服务器中设置的能够处理的http请求的线程数一定要大于 这个小索引所接收到的 顶级请求和次级请求的总和。如果配置没有这样配好的话,一个由分发而产生的死锁很有可能会发生。

       现在我们来试想下一种最简单的情况,只有两个小索引,每个小索引只能够起一个线程来处理Http 请求。两个索引都能接收顶级请求,并将请求分发给另一个索引。因为它们没有多余的线程可以处理多于一个的请求,所以 servlet容器就会阻塞 刚来的请求,这种情况一直持续到正在处理的请求被处理完毕。(但是,那个正在处理的请求永远也不会被处理完毕,因为它正在等待它分发出去的请求的回应,而这个分发出去的请求被阻塞了)。

        关于死锁,目前笔者想到的方法是设定分发请求的超时时间。这个应该不难实现。

 

Distributed Indexing

      怎样建立小索引,这点随用户的喜好而定。一种很简单的方法决定那条记录放在那个索引上可以使用类似这样的一种公式 uniqueId.hashCode() % numServers。

Example

     出于测试目的,我们在一台机器的两个不同的端口启动 solr 服务。

    

#make a copy 
cd solr
cp -r example example7574

#change the port number
perl -pi -e s/8983/7574/g example7574/etc/jetty.xml  example7574/exampledocs/post.sh

#in window 1, start up the server on port 8983
cd example
java -server -jar start.jar

#in window 2, start up the server on port 7574
cd example7574
java -server -jar start.jar

#in window 3, index some example documents to each server
cd example/exampledocs
./post.sh [a-m]*.xml
cd ../../example7574/exampledocs
./post.sh [n-z]*.xml

#now do a distributed search across both servers with your browser or curl
curl 'http://localhost:8983/solr/select?shards=localhost:8983/solr,localhost:7574/solr&indent=true&q=ipod+solr'

 

分享到:
评论
2 楼 swp 2012-10-26  
请教一个问题,我用solr对数据库某张存有大数量的表建索引,假如那张表中有个字段里面存的是各种复杂的sql语句,如果我想精确匹配某条sql语句,应该怎么做,我现在的做法是这个字段用string的类型不做分词,但是查询的时候由于sql的多样性(各种转义字符,and等关键字等等)不是很好做转义,而且不分词会增加很多存储空间,请问这个应该怎么办呢
1 楼 diaodou 2009-01-16  
Solr真的不错啊,现在可以:
1. 配置master/slave做读写分离
2. slaves配制成使用分布式搜索,达到scale out的效果
就perfect了。

问下楼主:
1. 分布式搜索时,不知道有没有使用全局的idf来ranking?
比如,搜索"java"时,其中一个shard里面全是java,分数自然就低了,但是全局来说,分数不应该这么低的。
2. 怎么处理shard crash的问题?

相关推荐

    solr-mongo-importer-1.1.0.jar

    solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar

    apache-solr-dataimportscheduler-1.0.zip_official54l_solr 5.x定时生成

    "apache-solr-dataimportscheduler-1.0.zip"是一个官方发布的54l版本,专门针对Solr 5.x的定时索引生成需求。 数据导入调度器(DataImportScheduler)是这个扩展的核心组件,它允许用户根据预设的时间间隔自动执行...

    apache-solr-3.5.0.jar

    1. `apache-solr-core-3.5.0.jar`: 这是Solr的核心库,包含了实现全文索引、查询、排序和结果高亮等功能的基础代码。其中,Solr服务器的核心功能如索引存储、查询处理、请求处理器和响应生成器都封装在这个JAR文件里...

    solr增量更新架包apache-solr-dataimportscheduler.jar

    "apache-solr-dataimportscheduler.jar" 是一个专门为Solr设计的扩展包,用于实现自动化的数据增量更新调度。 首先,我们要理解Solr的数据导入过程。Solr使用DataImportHandler(DIH)来从关系型数据库、XML文件或...

    Apache Solr(solr-8.11.1.tgz)

    使用Solr-8.11.1时,你需要配置Solr实例,定义你的索引字段,创建和管理索引,然后通过HTTP请求进行查询。同时,你可以利用Solr的 faceting(分面搜索)、highlighting(高亮显示)、spell checking(拼写检查)等...

    solr-dataimport-scheduler.jar 可使用于solr7.x版本

    Solr 数据导入调度器(solr-dataimport-scheduler.jar)是一个专门为Apache Solr 7.x版本设计的组件,用于实现数据的定期索引更新。在理解这个知识点之前,我们需要先了解Solr的基本概念以及数据导入处理...

    solr(solr-9.0.0.tgz)

    在使用Solr-9.0.0时,你需要根据业务需求创建或修改配置文件,如`solrconfig.xml`和`schema.xml`,定义索引的字段类型和字段。然后可以通过POST请求将数据导入Solr,Solr会自动进行分词、建立倒排索引等操作,从而...

    solr(solr-9.0.0-src.tgz)源码

    这里我们将围绕"solr-9.0.0-src.tgz"这个源码包,详细探讨其主要组成部分、核心功能以及开发过程中的关键知识点。 1. **Solr架构** Solr的架构基于Lucene,一个强大的全文搜索引擎库。它提供了分布式、可扩展、高...

    solr-import-export-json最新代码

    solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-...

    solr-dataimporthandler的jar包

    标题中的"solr-dataimporthandler的jar包"指的是 Solr 用于实现数据导入功能的两个核心 JAR 文件: 1. `solr-dataimporthandler-6.0.1.jar`:这是 DIH 的主库,包含了处理数据导入过程所需的类和方法。它提供了数据...

    solr-4.10.3

    Solr-4.10.3是Solr的一个稳定版本,发布于2014年,包含了对之前版本的各种改进和优化。 在Solr-4.10.3中,主要包含以下几个核心知识点: 1. **SolrCloud模式**:SolrCloud是Solr的一种分布式部署模式,引入了...

    solr-7.4.0.zip

    标题"solr-7.4.0.zip"表明这是一个包含了Solr 7.4.0版本的压缩包文件,该版本发布于2018年,包含了完整的Solr服务器及其相关组件。 在描述中提到,“solr7需要java8环境”,这是因为Solr的运行依赖于Java平台,特别...

    mmseg4j-solr-2.4.0.jar

    本文将深入探讨mmseg4j在Solr中的应用,以及如何在Solr 6.3版本中集成并使用mmseg4j-solr-2.4.0.jar这个库。 首先,mmseg4j是由李智勇开发的一个基于Java的中文分词工具,它的全称是“Minimum Match Segmentation ...

    最新版linux solr-8.8.2.tgz

    首先,你需要从 Apache 官方网站下载 `solr-8.8.2.tgz` 文件。完成下载后,使用 `tar` 命令解压文件: ``` tar -zxvf solr-8.8.2.tgz ``` 2. **配置环境变量**: 为了方便使用 Solr 的命令行工具,可以将 Solr...

    solr-dataimportscheduler-1.1.1.jar

    因此,Solr-dataimportscheduler插件应运而生,它的核心作用就是实现对Solr索引的增量更新,只导入自上次导入以来发生变化的数据,从而大大提高了数据同步的效率和系统的响应速度。 这个插件的1.1.1版本可能包含了...

    solr6--solr-dataimporthandler-scheduler-1.1

    在"solr6--solr-dataimporthandler-scheduler-1.1"这个项目中,我们关注的重点是DIH的调度功能,也就是如何定期自动更新Solr索引。 DataImportHandler(DIH)是Solr的一个插件,用于从关系型数据库或其他结构化数据...

    solr定时自动同步数据库需要用到的apache-solr-dataimportscheduler.jar包

    在标题提到的"solr定时自动同步数据库需要用到的apache-solr-dataimportscheduler.jar包"中,`apache-solr-dataimportscheduler.jar`是用于实现Solr数据导入计划任务的扩展插件。这个插件使我们能够设置定时任务,...

    支持solr6.1-solr-dataimport-scheduler-1.2.jar

    在 Solr 的生态系统中,`solr-dataimport-scheduler-1.2.jar` 是一个非常重要的组件,它允许用户定时执行数据导入任务,这对于需要定期更新索引的应用场景尤其有用。这个特定的版本 `1.2` 已经被优化以兼容 `Solr ...

    solr-dataimporthandler-4.10.3.jar

    solr自动更新包

    solr-4.10.3.rar

    在下载的`solr-4.10.3.tgz.tgz`文件中,通常包含完整的Solr安装包,解压后你可以找到所有必要的文件和目录结构,如`server`、`example`、`dist`等,它们分别对应Solr服务器、示例应用和二进制库。 `xufuli.txt`可能...

Global site tag (gtag.js) - Google Analytics