精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-15
最后修改:2010-03-23
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。
目前支持分布式查询的组件有:
对于分布式搜索组件,你也可以参考 WritingDistributedSearchComponents 。
Distributed Searching Limitations
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'
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-16
Solr真的不错啊,现在可以:
1. 配置master/slave做读写分离 2. slaves配制成使用分布式搜索,达到scale out的效果 就perfect了。 问下楼主: 1. 分布式搜索时,不知道有没有使用全局的idf来ranking? 比如,搜索"java"时,其中一个shard里面全是java,分数自然就低了,但是全局来说,分数不应该这么低的。 2. 怎么处理shard crash的问题? |
|
返回顶楼 | |
浏览 6174 次