solr-in-action-ch4-Configuring Solr
Solr基本的三个XML配置文件:
solr.xml: solr 日志、shard、solrcould等配置
solrconfig.xml: 某个solr core的配置
schema.xml:某个solr core的索引结构的配置,包含field 和field类型
这一章主要介绍solrconfig.xml, 某个solr core的配置。
1、Core的发现过程
扫描启动某个core的过程是这种:Solr webserver依据配置的java System Property(solr.solr.home),找到solr的home路径,然后solr会扫描这个home路径以下的包括有core.properties的子文件夹。core.properties定义了core的名称、以及其它一些配置信息(非必须,一般如今都在之类只定义name=your_collection_name)。其它一些參数例如以下左图。一旦solr发现了这个core之后就会到这个文件夹以下的conf文件夹下找到solrconfig.xml来開始初始化这个core。
Overview of solrconfig.xml
<!--solrconfig.xml中的配置项主要分下面几大块: 1.依赖的lucene版本号配置,这决定了你创建的Lucene索引结构。由于Lucene各版本号之间的索引结构并非全然兼容的,这个须要引起你的注意。 2.索引创建相关的配置。如索引文件夹,IndexWriterConfig类中的相关配置(它决定了你的索引创建性能) 3.solrconfig.xml中依赖的外部jar包载入路径配置 4.JMX相关配置 5.缓存相关配置,缓存包含过滤器缓存,查询结果集缓存,Document缓存,以及自己定义缓存等等 6.updateHandler配置即索引更新操作相关配置 7.RequestHandler相关配置。即接收clientHTTP请求的处理类配置 8.查询组件配置如HightLight。SpellChecker等等 9.ResponseWriter配置即响应数据转换器相关配置。决定了响应数据是以什么样格式返回给client的。 10.自己定义ValueSourceParser配置。用来干预Document的权重、评分,排序 --> < config > <!--依赖的lucene < luceneMatchVersion >4.7</ luceneMatchVersion > <!--Solr怎样去载入solr < lib dir = "../../../contrib/extraction/lib" regex = ".*\.jar" /> <!--用来指定一个solr的索引数据文件夹,solr创建的索引会存放在data\index文件夹下,默认dataDir是相对于当前core文件夹(假设solr_home下存在core的话)。 假设solr_home下不存在core的话,那dataDir默认就是相对于solr_home啦,只是一般dataDir都在core.properties下配置。
< dataDir >${solr.data.dir:}</ dataDir > <!--solr < directoryFactory name = "DirectoryFactory” ..."/> <!--索引相关配置--> < indexConfig >...</ indexConfig > <!--这个配置是用来在Solr中启用JMX--> < jmx /> <!--指定索引更新操作处理类--> < updateHandler class = "solr.DirectUpdateHandler2" > < updateLog >...</ updateLog > < autoCommit >...</ autoCommit > </ updateHandler > <!--索引查询相关的配置项--> < query > <!--缓存相关--> < filterCache ... < queryResultCache ... < documentCache ... <!-- < listener event = "newSearcher" class = "solr.QuerySenderListener" > < arr name = "queries" >...</ arr > </ listener > < listener event = "firstSearcher" class = "solr.QuerySenderListener" > < arr name = "queries" >...</ arr > </ listener > </ query > <!--request分发器--> < requestDispatcher handleSelect = "false" > < requestParsers ... < httpCaching never304 = "true" /> </ requestDispatcher > <!--Request < requestHandler name = "/select" class = "solr.SearchHandler" > < lst name = "defaults" >...</ lst > < lst name = "appends" >...</ lst > < lst name = "invariants" >...</ lst > < arr name = "components" >...</ arr > < arr name = "last-components" >...</ arr > </ requestHandler > <!--Example < searchComponent name = "spellcheck" class = "solr.SpellCheckComponent" >... </ searchComponent > <!--Extends < updateRequestProcessorChain name = "langid" >... </ updateRequestProcessorChain > <!--Formats < queryResponseWriter name = "json" class = "solr.JSONResponseWriter" >... </ queryResponseWriter > <!--自己定义ValueSourceParser配置,用来干预Document的权重、评分,排序--> < valueSourceParser name = "myfunc" ... <!--transforms < transformer name = "db" class = "com.mycompany.LoadFromDatabaseTransformer" > ... </ transformer > </ config > |
solrconfig.xml中有大量类似<arr> <list> <str> <int>这种自己定义标签,以下做个统一的说明:
arr:即array的缩写,表示一个数组,name即表示这个数组參数的变量名
lst即list的缩写。但注意它里面存放的是key-value键值对
bool表示一个boolean类型的变量,name表示boolean变量名,
同理还有int,long,float,str等等
Str即string的缩写,唯一要注意的是arr下的str子元素是没有name属性的,而list下的str元素是有name属性的
2、Query request handling
2.1、Request-handling overview
Solr 查询请求的处理过程:
1、Client(浏览器或者solrjclient)发送查询请求到solrserver
2、Jetty(或者tomcat等其它的webserver)会将/solr的请求路由到solr统一的request dispatcher,dispatcher会依据/collection1找到相应的core,并找到这个core的solrconfig.xml中定义的处理请求的 request handle
3、request handler 使用各个组件串行的处理这个请求
4、处理完毕后,Reponse writer组件会将结果处理成某个格式(xml、json等等)并返回client,默认是返回xml格式。
2.2、search handler
request handler主要有两类search handler和update handler。search handler负责处理查询请求、update handler用来更新索引的请求,这里主要介绍一下search handler,update handler 下一章介绍。下图是solrconfig.xml中/select request handler的定义。
ps:solrconfig.xml文件里定义的solr.开头的class(如这里的solr.SearchHandler),都会相应于solr core java package:
"analysis.", "schema.", "handler.", "search.", "update.", "core.", "request.", "update.processor.", "util.", "spelling.", "handler.component.", or"handler.dataimport." 。
这里的SearchHandler相应于
org.apache.solr.handler.component.SearchHandler 。
一个Search handler能够定义一下几个处理阶段:
1.请求參数处理
加入请求中没有的默认查询參数
覆盖改动请求的參数值
加入额外的參数
2.search first-components(可选)
3.search process components
4.search last-components (可选)
2.3、search components
2.3.1 QUERY COMPONENT
query处理的核心,通过active searcher 解析和运行查询。查询解析是通过參数控制的defType(如edismax,dismax)。query
组件查询初匹配查询參数的doc。这些doc能够被兴许的组件继续处理。query组件是默认开启的,兴许其它的组件须要在查询參数里显示的指定。
2.3.2 FACET COMPONENT
solr将以导航为目的的查询结果称为facet. 它并不会改动查询结果信息, 仅仅是在查询结果上依据分类加入了count信息, 然后用户依据count信息做进一步的查询, 比方淘宝的查询列表中, 上面会表示不同的类目相关查询结果的数量,,兴许会具体介绍
2.3.3 MORE LIKE THIS COMPONENT
假设启用这个组件。会搜索出和查询结果相似的doc,兴许会具体介绍
2.3.4 HIGHLIGHT COMPONENT
假设启用这个组件,会高亮显示匹配的文本,兴许会具体介绍
2.3.5 STATS COMPONENT
统计组件。假设启用,能够统计指定数字field的统计信息。如最小值、最大值、总和、平均值...等等统计信息。详细能够看以下的实例。
2.3.6、DEBUG COMPONENT
开启debug组件。能够看到solr 打分的详情,有助于排查一些诸如排序错误的问题。
开启debug组件仅仅用在请求參数添加debugQuery=true就能够了。
2.3.7 ADDING SPELLCHECK AS A LAST-COMPONENT
兴许再介绍
3、Managing searchers
solrconfig.xml中<query>标签包括了一些能够优化查询性能的參数。如缓存、field懒载入、新searcher预热等。
3.1 New searcher overview
searcher是solr处理query的组件。solr中仅仅有一个active 的searher。
这个active searcher 拥有全部lucene索引的仅仅读快照,假设提交一个新的doc到solr,这个doc在当前这个searcher中是不可见的。那么怎样才干使得新提交的doc可见呢?solr的解决方式是关闭当前的searcher,新开一个searcher。新的searcher拥有新提交的doc的索引的仅仅读快照。这就是solr
commit的须要做的一部分工作(每一个commit都要new 一个searcher)。
当进行一次commit之后,在旧的searcher上还有未运行完的查询,所以旧searcher的销毁是在其上面搜有查询运行完才运行的。销毁旧的searcher的时,其上面全部的缓存也都会被删除(由于原有的缓存都是基于旧的索引快照的,commit之后索引是有更新的。所以旧的缓存也应该是要失效的)。
而生成新的searcher须要运行一些计算(如又一次计算缓存),所以生成新的searcher是代价比較耗时的操作。
为了不正确用户的查询产生影响。solr採用的后台生成新的searcher的方式。当新的searcher就绪之前,旧的searcher一直是提供查询的,直到新的searcher 预热完成。
3.2、Warming a new searcher
预热新的searcher有两种方式:通过旧的cache自己主动预热新的cache、运行cache预热的查询。下一节会具体介绍自己主动预热。
这里先看一下运行cache预热的查询的配置。
通过配置一个listener,当newSeacher事件发生时。会运行queries里面的查询用来预热缓存。配置成预热的query一般都是应用最频繁的查询,配置queries不能过多,过多会造成预热的时间太久。耗费太多server的资源。
这样的预热方式方式一个非常实用的场景是solr服务启动first searcher的预热。配置first searcher的预热。仅仅须要将上面的event="firstSeacher"即可了。
solr推断事件是firstSeacher是依据当前Seacher是否是null推断的,假设当前seacher是null则为firstSearcher。
searcher预热还有两个重要的配置标签useColdSearcher和maxWarmingSearchers
<useColdSearcher>false</useColdSearcher>,当配置为true的时候,不等新的searcher预热完成就直接使用,而配置为false的时候,就是等到新的searcher预热完才会使用
<maxWarmingSearchers>2</maxWarmingSearchers>, 配置同一时候预热的searcher数量,假设searcher预热的时间过长,commit又比較频繁的话,会导致同一时候有多个searcher在预热。假设同一时候预热的数量超过配置的參数。之后的commit就会报错。假设常常出现报错,就须要考虑是否这个值设置的不合理或者预热时间过长。solr默认配置的是2。
4、cache management
4.1、cache fundamentals
- cache 大小
- 命中率与缓存踢除
- 缓存失效
- cache预热
4.2、filter cache
version=1&modificationDate=1439025599000&api=v2" alt="" style="margin:0px 2px; padding:0px; border:0px; display:block">
4.3、Query result cache
4.4、Document cache
4.5、Field value cache
5、Summary
上面仅仅是介绍了solrconfig.xml的一部分经常使用的配置,solrconfig.xml里面有大量的具体凝视。能够通过查看solrconfig.xml 的配置文件的了解其它的一些配置。如配置返回格式、怎样定义一个新的search handler、生产环境调优等。
solr-in-action-ch4-Configuring Solr的更多相关文章
- Solr In Action 笔记(4) 之 SolrCloud分布式索引基础
Solr In Action 笔记(4) 之 SolrCloud Index 基础 SolrCloud Index流程研究了两天,还是没有完全搞懂,先简单记下基础的知识,过几天再写个深入点的.先补充上 ...
- Solr In Action 笔记(3) 之 SolrCloud基础
Solr In Action 笔记(3) 之 SolrCloud基础 在Solr中,一个索引的实例称之为Core,而在SolrCloud中,一个索引的实例称之为Shard:Shard 又分为leade ...
- Solr In Action 笔记(2) 之 评分机制(相似性计算)
Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 我们对搜索引擎进行查询时候,很少会有人进行翻页操作.这就要求我们对索引的内容提取具有高度的匹配性,这就搜索引擎文档的相似性 ...
- Solr In Action 笔记(1) 之 Key Solr Concepts
Solr In Action 笔记(1) 之 Key Solr Concepts 题记:看了下<Solr In Action>还是收益良多的,只是奈何没有中文版,只能查看英语原版有点类,第 ...
- 自译Solr in action中文版
文件夹 Part 1 初识 SOLR 1 Solr 简单介绍 2 開始熟悉 Solr 3 Solr 核心概念 4 配置 Solr 5 建立索引 6 文本分析 Part 2 Solr 核心功能 7 发起 ...
- Solr初始化源码分析-Solr初始化与启动
用solr做项目已经有一年有余,但都是使用层面,只是利用solr现有机制,修改参数,然后监控调优,从没有对solr进行源码级别的研究.但是,最近手头的一个项目,让我感觉必须把solrn内部原理和扩展机 ...
- solr与.net课程(七)solr主从复制
既然solr是解决大量数据全文索引的方案,因为高并发的问题,我们就要考虑solr的负载均衡了,solr提供很easy的主从复制的配置方法,那么以下我们就来配置一下solr的主从复制 如果我们在192. ...
- Solr学习02:搭建Solr环境
一.安装虚拟机 Solr 必须运行在Java1.6 或更高版本的Java 虚拟机中,运行标准Solr 服务只需要安装JRE 即可,但如果需要扩展功能或编译源码则需要下载JDK 来完成.可以通过下面的地 ...
- solr之windws下搭建solr服务
安装Solr 首先保证已经正确安装了Java 下载Solr,当前最新版6.1.0 Solr各个版本下载地址 Solr从6.0之后需要Java1.8所以如果使用Solr6.0及其以上版本,请确保Java ...
- Solr7.3.0入门教程,部署Solr到Tomcat,配置Solr中文分词器
solr 基本介绍 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache ...
随机推荐
- windows 7系统搭建PHP网站环境
2.新建数据库打开浏览器,输入http://localhost:9999或者http://127.0.0.1:9999回车填写用户名root和密码回车登录点击权限-添加新用户填写用户名,主机选择本地, ...
- 面试题:Java中值传递和引用传递的问题
随便写写留着自己看. 首先,Java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递! 当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本.指向同 ...
- [转] Google 开源 iOS 应用测试工具:EarlGrey
Google 开源 iOS 应用测试工具:EarlGrey oschina 发布于: 2016年02月18日 (3评) 分享到: 收藏 +53 3月19日,深圳源创会火热报名中,go>&g ...
- 怎样制作一个横版格斗过关游戏 Cocos2d-x 2.0.4
本文实践自 Allen Tan 的文章<How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Coco ...
- [TypeScript] Custom data structures in TypeScript with iterators
We usually think of types as something that can define a single layer of an object: with an interfac ...
- LInux——安装Apache
在安装Apache的httpd的时候经常会遇到: configure: error: APR not found . Please read the documentation. configure ...
- ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
出现错误: ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignore ...
- 转:Window10下RabbitMQ安装图文教程
一.erlang下载安装 1.下载 下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双 ...
- 组播和广播的概念,IGMP的用途
1.组播和广播的概念 1) 组播 主机之间的通讯模式,也就是加入了同一个组的主机可以接收到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据. 主机可以向路由器请求加入或退出某个 ...
- 整理了一下浅墨大神的Visual C++/DirectX 9.0c的游戏开发手记
还是非常棒的博客,只是没有一个文件夹.所以自己做了一个山寨文件夹在这里.便于随时查找. 前面31期从略. [Visual C++]游戏开发笔记三十二 浅墨DirectX提高班之中的一个 DirectX ...