[Solr实践]自定义SolrEventListener实现searcher的autowarm策略

星期天, 九月 5th, 2010

Solr的searcher autowarm(预热)有两个时机,一个是系统启动时(firstSearcher),一个是使用新的searcher替换旧的searcher时(newSearcher)。Solr支持在solrconfig.xml中对SolrCore配置SolrEventListener来实现自定义的autowarm。通常来说,Solr提供的默认实现QuerySenderListener就够用了。在我的需求中,希望solrconfig.xml中配置的SolrEventListener是针对多个SolrCore的,这要是因为我的多个SolrCore共用了一个solrconfig.xml配置。就配置autowarm的查询query来说,简单的就是配置一个常见的query,但如果系统有排序查询(sort),可以配置适宜的sort条件以预热lucene的fieldCache。下面是我自定义的SolrEventListener,效果是,如果SolrCore没有配置query,就使用default的,否则使用自己的。

Solr之困

星期天, 八月 22nd, 2010

重写公司的站内搜索。经过前期一段时间对lucene和solr的熟悉,最后决定使用Solr作为新系统的基础框架。现在已经是第一阶段开发的后期,核心代码行数有11000+(不包含admin及client等)。现已实现的功能要比已有系统要丰富些,但综合比较两个系统总的代码量,其实新系统并不多得太多。新系统使用Solr代替了已有系统实现的部分功能,这减少了新系统的代码量,同是新系统实现了已有系统不具有的功能,也增加了一些代码量。开发的这段时间,因为新系统中很多代码是独立于Solr的,所以和Solr的交互也是时断时续,以使得即便到了开发后期我还能发现Solr实现的一些细节带给我的困扰。

[Solr源码分析]LRUCache和FastLRUCache实现分析

星期一, 八月 9th, 2010

在 [Solr 实践]Solr Cache使用介绍及分析 一文我有对Solr的LRUCache和FastLRUCache做了一些介绍,本文在此基础对其实现做些补充。
1、LRUCache的实现分析
在分析LRUCache前先对LinkedHashMap做些介绍。LinkedHashMap继承于HashMap,它使用了一个双向链表来存储Map中的Entry顺序关系,这种顺序有两种,一种是LRU顺序,一种是插入顺序,这可以由其构造函数public LinkedHashMap(int initialCapacity,float loadFactor, boolean accessOrder)指定。所以,对于get、put、remove等操作,LinkedHashMap除了要做HashMap做的事情,还做些调整Entry顺序链表的工作。
以get操作为例,如果是LRU顺序(accessOrder为true),Entry的recordAccess方法就调整get到的Entry到链表的头部去:

public V get(Object key) {
Entry<K,V> e = (Entry<K,V>)getEntry(key);
if (e [...]

[Solr实践]Solr Cache使用介绍及分析

星期天, 八月 1st, 2010

本文将介绍Solr查询中涉及到的Cache使用及相关的实现。Solr查询的核心类就是SolrIndexSearcher,每个core通常在同一时刻只由当前的SolrIndexSearcher供上层的handler使用(当切换SolrIndexSearcher时可能会有两个同时提供服务),而Solr的各种Cache是依附于SolrIndexSearcher的,SolrIndexSearcher在则Cache生,SolrIndexSearcher亡则Cache被清空close掉。Solr中的应用Cache有filterCache、queryResultCache、documentCache等,这些Cache都是SolrCache的实现类,并且是SolrIndexSearcher的成员变量,各自有着不同的逻辑和使命,下面分别予以介绍和分析。

[Solr源码分析]Solr复制类ReplicationHandler实现简要分析

星期天, 七月 25th, 2010

在上一文《solr ReplicationHandler使用介绍》的基础上,本文接着对solr的ReplicationHandler实现细节做些分析,这个分析原则上没有摘取大段代码,窃以为摘了代码后未见得有很好的阐述效果,但不摘取后窃又发现,阐述的效果依旧不好。归结起来,还是窃的表达不够深入浅出所致。闲言少叙,直接上内容。

[Solr实践]Solr复制类ReplicationHandler使用介绍

星期六, 七月 24th, 2010

solr1.4中引入ReplicationHandler代替外部脚本来复制索引数据,ReplicationHandler使得复制索引数据更自动化。对于使用者来说,只要简单的配置好,就可以一劳永逸的享受solr的复制功能了。下面介绍其使用相关内容。

分享Sify.com的架构经验

星期六, 五月 15th, 2010

今天分享的网站架构来自于Sify.com Architecture – A Portal at 3900 Requests Per Second(该标题有标题党嫌疑),对英文熟稔并不屑于我的中文简述的可以跳过该文。Sify.com是印度的一家portal网站,应该是信息集成类网站。它给出的月 pv是1.5亿次,每秒请求数是3900次(应该是针对所有服务的页面请求,包括异步的,并且是高峰的,否则就和pv对不上了)。按规模来说,算是个中等规模的网站,不过它的架构却是很值得说道的。