Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎.
随着solr索引数量量的增大,更新时间以及索引时间,都会增加。
关于solr的集群主要分为主从和SolrCloud两种。这里主要介绍一下主从的配置。它主要实现:在master节点进行数据写操作,在slave节点进行读操作。当并发量大些,可以通过扩展slave节点数来应对,多个slave做一个反向代理和负载均衡。
主节点配置:solr/conf/solrconfig.xml
1 2 3 4 5 6 7
| <requestHandler name="/replication" class="solr.ReplicationHandler" > <lst name="master"> <str name="replicateAfter">commit</str> <str name="replicateAfter">startup</str> <str name="confFiles">schema.xml,stopwords.txt,spellings.txt,synonyms.txt</str> </lst> </requestHandler>
|
master 标志该core 为主节点。复制的行为发生在commit、startup之后。cofFiles表示,向从节点复制的配置文件(记住,主从的solrconfig.xml配置不一样,不要把solrconfig.xml也复制到从节点了)。
再看下slave从节点的配置:solr/conf/solrconfig.xml
1 2 3 4 5 6
| <requestHandler name="/replication" class="solr.ReplicationHandler" > <lst name="slave"> <str name="masterUrl">http://192.168.1.100:8983/solr/default</str> <str name="pollInterval">00:00:20</str> </lst> </requestHandler>
|
pollInterval 表示多久向master同步一次数据,数据格式{时}:{分}:{秒}。这个要根据你的业务场景。如果更新比较频繁,就把这个值调小点,反之,就调大些。在同步数据时,根据网络和机器配置等不同,slave之间的数据会存在不同步的情况。如果,你对此有要求,需要注意了。总之,任何一种集群方案都不是万能的。
在rails里,sunspot.yml配置如下:
1 2 3 4 5 6 7 8 9 10 11
| production: solr: hostname: slave-solr-server port: 8983 master_hostname: master-solr-server master_port: 8983 log_level: WARNING master_solr: hostname: master-solr-server port: 8983 log_level: WARNING
|