Solr调优参考-续

标签: 未分类 | 发表时间:2012-11-13 10:34 | 作者:yingyuan
出处:http://rdc.taobao.com/team/jm
solr调优步骤参考
这篇blog主要以实践出发,从顶到底,从大到细的思路来进一步描述,solr优化,并且是基于横向发展来说的(管理更多core),对于纵向的(core内部、搜索核心技术)。

例如分词、queryparse、分词、实时、分布式的优化、排序等偏轻!
文章有不合理,或者错误的请及时反馈给鹰缘。

1. 最重要、最影响系统整体稳定和吞吐量(针对业务总索引布局优化)
毫无疑问数据的分区管理、扩容是入口。另外,对于长尾应用,就是大量的小搜索接入,此时管理平台是瓶颈。

参考建议1:
将数据分片,对于solr就是分多core,能细尽量细,单个solr instance上部署core。
保守数据,单coredocument数量控制在2000w以内。
真实场景:4g
memory上日常环境,单core的数据量不大,部署了34个core,没有出啥问题。真实物理机上部署过24core,单core超过6G的索引。

参考建议2:
如果可以,建索引和查询服务器独立开来,最好的方式是前后排,不行的话就弄个集中build。
前后排是最完美了,集中build在索引同步和core切换依然对线上查询有一定影响。

参考建议3:
全量索引构建和索引查询甚至可以分开优化,构建索引的引擎可以特殊调节参数,加速索引的构建。例如,并行document,单线程write
document,而多份数据同时运行,之后merger等。极端的可以采取C++ 版构建索引,前提是索引结构要一致。

参考建议4:
流式传输。索引本身就是基于segment的分片,便于增量,增量到一定程度支持merger为更大片增量。完全可以实习流式的segment级别的索引同步,要求一个可靠的传输协议。solr
目前基于commitpoint点的增量传输还可以进一步优化。

2.针对core的优化(针对单索引优化)
core的优化首先看schema的设置。

参考建议1:
schema的字段,要每个字段每个字段去细扣。
能不stored的,将stored=false。多个需要stored的,可以考虑组成新的doc,存储到数据库,索引存共同id

能合并的,合并。合并的字段,例如属性类似的,可以考虑空格分开,然后term查询。
long short int的类型,统一使用trie类型。
如果文本排序很弱,全部text类型去掉频率位置信息,索引体积、性能有一定提升
对应时间、url等类型,执行转化、压缩,减少文本和索引相

参考建议2:
单core里面分多子目录,solr里面能针对多子目录做快速定位查询的。

参考建议3:
core可以共享index目录的,可以尝试多个core,共享相同索引目录。不同core处理一类特征请求,并针对性缓存相关信息。

3.针对query优化(针对单索引读优化)
query中能简单,尽量简单。fq使用的话,一定要配置相关cache,cache命中率反应参数大小。

参考建议1:
fq尽管可以缓存,建议fq的粒度尽量大的同时能与其他query共享。fq的FastLRUcache
值在追求命中率的同时,需要平衡gc,cache大了 gc会很频繁。
对应实时索引更新的,cache建议不要开了,频繁的reopen会导致cache的频繁迁移,实际效果不好。
facet的,这个值是lucene里面用到,能开大尽量开大,对gc尤其影响明显。慎重参数值。
在准确性上,queryparse建议使用dismax,除非对排序不是特别要求,要看具体业务,可以采取boolean 查询。
优先使用dismax,次之phrasequery,再次之booleanquery。

参考建议2:
大区间、多OR、多AND等查询,需要针对性优化。优化上次尽量与solr统一,尤其是cache的统一,底层尽量往luceneAPI靠近,尽量减少IO、充分发挥cache、减少不必要的中间解析。需要兼顾相关度有时候。

参考建议3:
如果有些数据的读写非常特别,不妨领出来,单独对象处理。例如放到本地cache中。

4.针对系统配置
主要是基础环境的选择。
参考建议1:
JVM heap不是越大越好,要兼顾gc。新生代从小值开始,逐步增大到合适。让old去空间大些,perm去两值相同
在8g及以上,务必使用CMS,cms的各参数也需要微调
极端情况,可以尝试关闭swapoff
在GC配置同时,关注cache的配置,cache往往在开启后,占住大量内存。

参考建议2:
tomcat、jetty尽量使用轻量级容器。

相关 [solr 参考] 推荐:

Solr调优参考

- - 淘宝网通用产品团队博客
共整理三部分,第一部分Solr常规处理,第二部分针对性性处理,前者比较通用,后者有局限性. 务必根据具体应用特性,具体调节参数,对比性能. 具体应用需要全面去把控,各个因素一起起作用. 第一部分. E文连接 http://wiki.apache.org/solr/SolrPerformanceFactors.

Solr调优参考-续

- - 淘宝网综合业务平台团队博客
这篇blog主要以实践出发,从顶到底,从大到细的思路来进一步描述,solr优化,并且是基于横向发展来说的(管理更多core),对于纵向的(core内部、搜索核心技术). 例如分词、queryparse、分词、实时、分布式的优化、排序等偏轻. 文章有不合理,或者错误的请及时反馈给鹰缘. 最重要、最影响系统整体稳定和吞吐量(针对业务总索引布局优化).

solr的参考资料

- - 企业架构 - ITeye博客
大多数的应用程序将数据存储在关系数据库、xml文件中. 对这样的数据进行搜索是很常见的应用. 所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入.           目标.      能够读取关系数据库中的数据.      通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档  .

Solr SpellCheck 应用

- - 开源软件 - ITeye博客
通过对各类型的SpellCheck组件学习,完成项目拼写检查功能. 本文使用基于拼写词典的实现方式,solr版本为5.3.0. SpellCheck 简述. 拼写检查是对用户错误输入,响应正确的检查建议. 比如输入:周杰轮,响应:你是不是想找 周杰伦. Solr的拼写检查大致可分为两类,基于词典与基于Solr索引.

Solr DocValues详解

- - 企业架构 - ITeye博客
什么是docValues. docValues是一种记录doc字段值的一种形式,在例如在结果排序和统计Facet查询时,需要通过docid取字段值的场景下是非常高效的. 为什么要使用docValues. 这种形式比老版本中利用fieldCache来实现正排查找更加高效,更加节省内存. 倒排索引将字段内存切分成一个term列表,每个term都对应着一个docid列表,这样一种结构使得查询能够非常快速,因为term对应的docid是现成就有的.

solr的使用

- - Web前端 - ITeye博客
solr的原理不和大家一一讲述,主要讲solr在使用过程中的注意事项.  首先是安装solr,安装步骤省略. (不要说我懒,安装步骤导出都是. 成功之后 需要在solr里面建立一个针对你的业务的服务,我想建立一个叫做discuz的服务. 然后你在你的solr目录 :solr-5.5.3/server/solr/  下看见了discuz   ,这是你刚刚创建的,针对某一业务的整个搜索配置都是在这个目录下配置的.

Solr之缓存篇

- - 淘宝网综合业务平台团队博客
Solr在Lucene之上开发了很多Cache功能,从目前提供的Cache类型有:. 而每种Cache针对具体的查询请求进行对应的Cache. 本文将从几个方面来阐述上述几种Cache在Solr的运用,具体如下:. (1)Cache的生命周期. (2)Cache的使用场景. (3)Cache的配置介绍.

Solr主从备份

- - 研发管理 - ITeye博客
SOLR复制模式,是一种在分布式环境下用于同步主从服务器的一种实现方式,因之前提到的基于rsync的SOLR不同方式部署成本过高,被SOLR1.4版本所替换,取而代之的就是基于HTTP协议的索引文件传输机制,该方式部署简单,只需配置一个文件即可. 以下讲解具体操作步骤: . 步骤分主服务器和从服务器,允许有多个从服务器,即从服务器的配置一样.

solr相似匹配

- - CSDN博客推荐文章
相似匹配   在我们使用网页搜索时,会注意到每一个结果都包含一个 “相似页面” 链接,单击该链接,就会发布另一个搜索请求,查找出与起初结果类似的文档. Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 实现了一样的功能. 如上所述,MLT 是与标准 SolrRequestHandler 集成在一起的;MoreLikeThisHandler 与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求.

Solr与Mysql集成指南

- sun - 草根网:互联网界的读者文摘
在《企业级搜索引擎Solr使用入门指南》及《企业级搜索引擎Solr交流》中对Solr的使用做了简单介绍. 在数据库驱动的应用中,当时采....