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 服务。
Shell代码
#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'
分享到:
相关推荐
- **索引**:Solr使用Lucene来创建、维护和搜索索引。索引包括倒排索引,允许快速查找包含特定词汇的文档。 - **请求处理**:当请求到达时,Solr使用RequestHandler来解析和处理这些请求,返回结果。 - **配置**...
- 将 C:\solr-4.9.0\example\resources\log4j.properties 复制到 C:\apache-tomcat-7.0.53\webapps\solr\WEB-INF\classes 3. **启动与测试** - 启动 Tomcat 服务器 - 在浏览器中访问 http://localhost:8080/solr...
solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar
6. **优化和管理**:Solr提供了丰富的管理功能,包括优化索引、重建索引、查看日志、监控性能等。这些可以通过Solr的Web管理界面(默认在`http://localhost:8983/solr/`)进行。 Solr 3.5.0版本虽然较旧,但其基础...
首先,你需要从 Apache 官方网站下载 `solr-8.8.2.tgz` 文件。完成下载后,使用 `tar` 命令解压文件: ``` tar -zxvf solr-8.8.2.tgz ``` 2. **配置环境变量**: 为了方便使用 Solr 的命令行工具,可以将 Solr...
- **性能优化**:Solr团队不断努力提升查询速度和索引效率,8.11.1版本可能包含了一些新的性能优化。 - **新功能**:可能引入了新的搜索特性,比如新的查询语法、更强大的分析器或者对最新技术标准的支持。 - **稳定...
"apache-solr-dataimportscheduler-1.0.zip"是一个官方发布的54l版本,专门针对Solr 5.x的定时索引生成需求。 数据导入调度器(DataImportScheduler)是这个扩展的核心组件,它允许用户根据预设的时间间隔自动执行...
8. **实时索引**:Solr支持实时索引,一旦数据被添加或更新,索引会立即生效,无需重启服务。 9. **性能优化**:Solr可以通过调整缓存策略、使用NRT(Near Real Time)索引、优化查询执行计划等方式提高查询速度。 ...
在使用Solr-9.0.0时,你需要根据业务需求创建或修改配置文件,如`solrconfig.xml`和`schema.xml`,定义索引的字段类型和字段。然后可以通过POST请求将数据导入Solr,Solr会自动进行分词、建立倒排索引等操作,从而...
"apache-solr-dataimportscheduler.jar" 是一个专门为Solr设计的扩展包,用于实现自动化的数据增量更新调度。 首先,我们要理解Solr的数据导入过程。Solr使用DataImportHandler(DIH)来从关系型数据库、XML文件或...
2. **索引与查询**:Solr的核心功能是对文档进行索引,并提供高效的查询服务。索引过程包括分析、字段处理、倒排索引等步骤,这些都使得Solr能够在大量数据中快速找到相关结果。查询时,Solr支持多种查询语法和过滤...
- **索引**:Solr通过构建倒排索引来实现快速搜索,索引是Solr的核心数据结构。 - **Collection和Core**:Collection是一组逻辑相关的SolrCores,而Core是Solr的基本运行单元,每个Core可以独立处理搜索和索引任务...
标题中的"solr-dataimporthandler的jar包"指的是 Solr 用于实现数据导入功能的两个核心 JAR 文件: 1. `solr-dataimporthandler-6.0.1.jar`:这是 DIH 的主库,包含了处理数据导入过程所需的类和方法。它提供了数据...
2. **分布式搜索**:Solr支持分布式部署,可以在多台服务器上分布数据,提供高可用性和水平扩展性。 3. **实时索引**:Solr能够实时地处理新数据的索引和搜索,提高了系统的响应速度。 4. **多字段搜索**:支持对多...
- **Core**:Solr的基本工作单元,负责存储和索引数据。 - **Schema**:定义了字段和字段类型,指导Solr如何处理和索引数据。 - **Query解析器和过滤器**:负责解析用户输入的查询,并应用各种策略来改善结果。 - **...
3. **高可用性**:Solr提供了分布式搜索和处理功能,允许多个节点组成集群,确保服务的高可用性和容错性。 4. **实时索引**:Solr支持实时索引,这意味着新的数据一旦被添加到索引,就可以立即被搜索到,无需额外的...
Solr 数据导入调度器(solr-dataimport-scheduler.jar)是一个专门为Apache Solr 7.x版本设计的组件,用于实现数据的定期索引更新。在理解这个知识点之前,我们需要先了解Solr的基本概念以及数据导入处理...
Solr-Core 是 Solr 的核心部分,包含了索引和查询的主要功能。它提供了文档的存储、索引构建、搜索服务以及结果集的排序和分页。在源码中,你可以深入理解 Solr 如何处理请求、建立倒排索引、实现分布式搜索等。...
2. **索引和查询**:Solr的核心功能在于构建高效的全文索引和执行复杂的查询。4.10.3版本支持多种类型的字段,如文本、数字、日期等,并提供了丰富的查询语法,包括标准查询解析器、短语查询、近似查询等。 3. **...
标题"solr-7.4.0.zip"表明这是一个包含了Solr 7.4.0版本的压缩包文件,该版本发布于2018年,包含了完整的Solr服务器及其相关组件。 在描述中提到,“solr7需要java8环境”,这是因为Solr的运行依赖于Java平台,特别...