原文出处:http://blog.chenlb.com/2009/01/solr-multicore-work-with-solr-distributed-searching-to-search-big-index.html
Solr Distributed Searching (分布式搜索) 是 solr 1.3 的特性。大索引,可能有多种原因要把它分成N个小的索引,可以把小索引放到其它的机器上,但是我没这么多机器怎么办呢?solr 1.3 有 multicore,恩,multicore 简单使用
可以看我那一篇文章。各个 core 各不干扰,可以独立做索引(做索引时,可以分散到各个core上)。
现来看下 Distributed Searching 的效果,打开:http://localhost:8080/solr-cores/core0/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on&shards=localhost:8080/solr-cores/core0,localhost:8080/solr-cores/core1
可以看到三条记录,core0 一条,core1 二条。
接着会有一个问题:原来很多程序调用 solr,用如 localhost:8080/solr-cores/select/?q=*%3A* 。又不想改原来的调用的代码,能不能做到透明呢,探索...
记得以前看 solr 文档时可以定义一些默认的查询参数,那 shards 参数也应该可以写在配置里。然后再 core0 的 solrconfig.xml 文件里的 standard request handler 里加入这参数,如:
-
<
requestHandler
name
=
"standard"
class
=
"solr.SearchHandler"
default
=
"true"
>
-
-
<
lst
name
=
"defaults"
>
-
<
str
name
=
"echoParams"
>
explicit
</
str
>
-
<
str
name
=
"shards"
>
localhost:8080/solr-cores/core0,localhost:8080/solr-cores/core1
</
str
>
-
</
lst
>
-
</
requestHandler
>
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="shards">localhost:8080/solr-cores/core0,localhost:8080/solr-cores/core1</str>
</lst>
</requestHandler>
马上运行下,但好长时间没有结果,CPU使用率很高,深思了下,....
估计是死循环,因为solr解析shards后,调用shard时,是用默认的request
handler。而其中一个shard又是core0(自身),那就等于不会结果的递归。所以这种方法不行。要避免死循环,就不要core0来做合并,可
以找其它。于是我就加了一个tomcat实例如localhost:8080/solr来做代理(合并结果),结果成功运行。
想来想去,能不能不要另一个tomcat实例呢,直接就用一个 core,继续再探索... 。
我再开一个 core 就命名为 core,复制core0为core。把原来core0/solrconfig.xml的配置的shards去掉,然后在 solr1.3/example/multicore/solr.xml里加,如:
-
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<
solr
persistent
=
"false"
>
-
-
<
cores
adminPath
=
"/admin/cores"
>
-
<
core
name
=
"core"
instanceDir
=
"core"
/>
-
<
core
name
=
"core0"
instanceDir
=
"core0"
/>
-
<
core
name
=
"core1"
instanceDir
=
"core1"
/>
-
</
cores
>
-
</
solr
>
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
<cores adminPath="/admin/cores">
<core name="core" instanceDir="core" />
<core name="core0" instanceDir="core0" />
<core name="core1" instanceDir="core1" />
</cores>
</solr>
结果成功运行。其中,core0、core1是有数据的,而core是没数据的,core只是运行合并。问题虽然可以差强人意地解决。但是还有一个
问题:原来的程序要调用solr,所有url不能改变,加了core是要改url
的,看源码时发现它可以为core名定义别名,就是用“,”号隔开。改为如下:
-
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<
solr
persistent
=
"false"
>
-
-
<
cores
adminPath
=
"/admin/cores"
>
-
<
core
name
=
"core,,"
instanceDir
=
"core"
/>
-
<
core
name
=
"core0"
instanceDir
=
"core0"
/>
-
<
core
name
=
"core1"
instanceDir
=
"core1"
/>
-
</
cores
>
-
</
solr
>
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
<cores adminPath="/admin/cores">
<core name="core,," instanceDir="core" />
<core name="core0" instanceDir="core0" />
<core name="core1" instanceDir="core1" />
</cores>
</solr>
"core,,"为什么是两个","号呢?。"core,"解析不出两个名,所有就无别名了。"core,,",解析出两个名,一是:"core,一是:"" 空串。有了空串就可以原来的url可以到达core(合并的core)。
至于死循环问题,同事在看源码,看是否不用多加一个额外的core来合并。结果他发现一个shard.qt的参数可以解决此问题,本质就是让所有的
shard调用不用默认request handler,shard.qt可以做到这一点,使所有的shard调用都加qt参数。
现来改为最后的方案,在core0与core1的solrconfig.xml里加一个request handler如:
-
<
requestHandler
name
=
"shard"
class
=
"solr.SearchHandler"
/>
<requestHandler name="shard" class="solr.SearchHandler" />
然后再core0的solrconfig.xml的默认request handler加shards参数,与shards.qt为shard(shard request handler),如:
-
<
requestHandler
name
=
"standard"
class
=
"solr.SearchHandler"
default
=
"true"
>
-
-
<
lst
name
=
"defaults"
>
-
<
str
name
=
"echoParams"
>
explicit
</
str
>
-
<
str
name
=
"shards.qt"
>
shard
</
str
>
-
<
str
name
=
"shards"
>
localhost:8080/solr-cores/core0,localhost:8080/solr-cores/core1
</
str
>
-
</
lst
>
-
</
requestHandler
>
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="shards.qt">shard</str>
<str name="shards">localhost:8080/solr-cores/core0,localhost:8080/solr-cores/core1</str>
</lst>
</requestHandler>
然后在,solr.xml里的core(没数据的去掉),把core0加上空的别名,如:
-
<
core
name
=
"core0,,"
instanceDir
=
"core0"
/>
<core name="core0,," instanceDir="core0" />
当然也可以在core1里加相同的参数,这样core0与core1的功能是一样的,就是两个搜索的url都可以找到所有的数据,我认为:每个配置
一样,在索引分到其它机器的时候比较有作用(如果这样,可以不用multicore的形式,即原始形式),在外面看不出是几个索引的,同时合并的任务也均
匀一些。
Solr Distributed Searching
当然也会消耗,合并的core会向每个shard的core发送两次请求:第一次是找id;第二次是根据id再找文档。如果有N个shard,可以认为有
2N+1次请求,1是作合并的请求,其中2N的请求(发每个shard发送的)是用二进制协议通信,性能比xml协议好。
分享到:
相关推荐
资源名称:相关性搜索 利用Solr与Elasticsearch创建智能应用内容简介:《相关性搜索:利用Solr与Elasticsearch创建智能应用》揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可...
"Solr Multicore 结合 Solr Distributed Searching 切分大索引来搜索 - Bory_Chan.mht"讲述了Solr的多核(Multicore)特性和分布式搜索功能。多核允许在一个Solr实例上管理多个独立的索引,而分布式搜索则能处理大...
Solr,全称为Apache Solr,是一款开源的企业级全文搜索引擎,由Java编写,它提供了高效、可扩展的搜索和分析功能。在这个“solr导航搜索工具+文档+配置代码”压缩包中,包含了Solr的相关资源,可以帮助我们快速理解...
Solr 7.5 搜索框架是Apache Lucene项目下的一个高性能、全文检索服务应用,被广泛应用于企业级搜索引擎建设。它提供了分布式、可扩展、热插拔的搜索能力,支持多种数据源,并且易于管理和配置。Solr 7.5 版本在前一...
Solr的Multicore配置是针对大型和复杂搜索应用的一种解决方案,它允许在一个Solr实例中管理多个独立的核心(core),每个核心对应一个独立的索引和配置。这种配置方式有助于实现更好的资源管理和扩展性,尤其适用于...
2. 解压 Solr:解压 Solr 的安装包,包括 Bin、Contrib、Dist、Docs、Example、Solr、Multicore、Webapps、Licenses 等目录。 3. 安装 SolrCore:SolrCore 是 Solr 的核心组件,需要安装和配置 SolrCore。 4. 配置 ...
这个版本的Solr提供了一套高度可扩展和高性能的搜索解决方案,支持大量的并发请求和大数据处理。以下是对Solr 4.9.0及其核心特性的详细解释: 1. **快速全文检索**:Solr利用倒排索引技术,实现对文本内容的快速...
Solr是Apache软件基金会的一个开源项目,是一款强大的全文搜索引擎服务器,它提供了分布式、可扩展、高可用性的搜索和分析服务。此压缩包“最新版windows solr-8.8.2.zip”包含了Windows环境下Solr的最新版本8.8.2的...
在Solr 6.2.0版本中,这个强大的分布式搜索引擎引入了许多新特性和改进,使其在处理大规模数据搜索时更加高效。 一、Solr的架构与工作原理 Solr的核心架构包括客户端API、Solr服务器和索引库。客户端通过HTTP或...
总的来说,Apache Solr 8.11.1是一个功能强大且高度可定制的搜索平台,适用于各种规模的企业应用,无论是用于网站搜索、电商产品搜索,还是大数据分析场景,都能提供高效的搜索解决方案。通过下载并解压"solr-8.11.1...
- **索引**:Solr通过建立倒排索引来加速查询,其中包含了文档ID和关键词之间的映射关系。 - **文档**:在Solr中,文档是信息的基本单元,可以是HTML、XML、JSON等格式的数据。 - **集合(Core)**:Solr中的集合...
Solr它是一种开放源码的、基于 Lucene 的搜索服务器,可以高效的完成全文检索的功能。在本套课程中,我们将全面的讲解Solr,从Solr基础到Solr高级,再到项目实战,基本上涵盖了Solr中所有的知识点。 主讲内容 章节一...
Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理全文搜索和企业级搜索。它基于Java语言开发,可以高效地索引大量数据,并提供快速、可扩展的搜索功能。Solr 7.5.0是该软件的一个特定版本...
Solr 8.0.0 是一个非常重要的版本,它是Apache Solr的最新发行版,一个强大且广泛使用的全文搜索引擎。这个tgz包包含了Solr的核心组件和所有必要的文件,以便用户能够快速部署并开始使用这个高效的企业级搜索解决...
它通过分词和建立倒排索引来实现高效的文本搜索。 2. 文档:Solr的基本处理单元是文档,它可以包含多个字段,每个字段都有特定的类型,如文本、日期或数字。 3. 集群:Solr支持多节点集群,通过SolrCloud模式可以...
2. Solr 的优点:Solr 支持多种数据类型格式,可以实时搜索,解决分布式系统的数据量大的问题。 3. Solr 和 Lucene 的关系:Solr 是基于 Lucene 开发的,Lucene 是一个开源的搜索引擎库。 4. Solr 的索引机制:...
Solr 5.5 是一个重要的版本,它是Apache Solr搜索平台的一个里程碑。Solr是一个开源的全文搜索引擎,被广泛应用于构建高效的、可扩展的搜索解决方案。它支持各种数据源,包括文本、图像和其他类型的数据,并能进行...
通过上述内容,我们不仅了解了 Solr 的基本概念、Solr 与 Lucene 的区别,还学习了如何安装和配置 Solr,以及如何使用 Solr 进行索引的创建和搜索。Solr 作为一款企业级的搜索引擎,凭借其强大的功能和灵活性,在...