Solr 4.0: Realtime GET

原文链接: Solr 4.0: Realtime GET  

在即将到来的Solr 4.0中,"Realtime get"是我准备要研究的。它甚至允许你查看发送到Solr但还没被commit到索引文件的数据。下面让我们看一下它是如何运作的。 

原理  
原来Lucene/Solr中的更新操作有一个小问题:在你提交数据但是还没有执行commit命令时,它们是不能被访问的。原因在于commit是非常耗性能的,如果执行过于频繁则会引起性能问题。所以,当你需要让数据变的可用时,你就需要在性能和快速commit之间做出选择。为了这个Lucene实现了Near Real Time(NRT),这在Lucene中我们已经可用了,但是Solr要等到4.0,而且4.0还不只提供了这一个功能。 

配置  
为了使用实时搜索我们需要对Solr作一下配置: 

Transaction log  
第1件要配置的是事务日志(transaction log)的写入。添加以下信息到updateHandler配置中: 
引用

<updateLog> 
   <str name="dir">${solr.data.dir:}</str> 
</updateLog> 

也就是说,事物日志的目录将跟索引的目录相同。 

Realtime Get handler  
第2件需要做的事,是查看你的Realtime get的处理,是否做了正确的配置(或添加组件到你定义的handler上)。没有的话添加如下的代码到solrconfig.xml中: 
引用

<requestHandler name="/get" class="solr.RealTimeGetHandler"> 
  <lst name="defaults"> 
    <str name="omitHeader">true</str> 
  </lst> 
</requestHandler> 


执行  
我做了一个简单的测试以验证Realtime Get的运作。首先要做的是索引一个文件(这个文件在exampledocs目录中有),使用如下的命令: 
引用
curl 'http://localhost:8983/solr/update' -d @hd.xml -H 'Content-type:application/xml'


当然,在索引过后,不能发送commit命令.我们预期如下的命令不会有结果返回: 
引用
http://localhost:8983/solr/select?q=*:*


如果我们使用/get 请求的话,将会有结果。查询一下: 
引用
http://localhost:8983/solr/get?id=SP2514N


在结果中我得到了如下的文档结果: 
引用

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
<doc name="doc"> 
  <str name="id">SP2514N</str> 
  <str name="name">Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133</str> 
  <str name="manu">Samsung Electronics Co. Ltd.</str> 
  <str name="manu_id_s">samsung</str> 
  <arr name="cat"> 
    <str>electronics</str> 
    <str>hard drive</str> 
  </arr> 
  <arr name="features"> 
    <str>7200RPM, 8MB cache, IDE Ultra ATA-133</str> 
    <str>NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor</str> 
  </arr> 
  <float name="price">92.0</float> 
  <int name="popularity">6</int> 
  <bool name="inStock">true</bool> 
  <date name="manufacturedate_dt">2006-02-13T15:26:37Z</date> 
  <str name="store">35.0752,-97.032</str></doc> 
</response> 

看来返回的结果没有写入到索引中--漂亮! 

使用说明  
你可能已经注意到了,使用/get 获取一个文档时,必须对该文档提供唯一的标识(或列表)。是的,Realtime get 还不支持搜索,因为它还没创建完整的搜索。这个功能能告诉我们哪些文档被更新了,比如作为Solr的一个组件使用。  好消息是,你不需要担心更新的性能--solr.RealTimeGet非常快。所以,如果你的程序有频繁更新的问题,那现在你可以偷着乐了。 

后记  
RealTime Get功能添加到了Solr中,不久也将会添加到SolrClou中。由于使用了事务日志,这使得集群节点或NRT的实例可以自动的恢复。正像你看到的,Solr4.0不只是搜索,还拥有数据存储的功能,这类似于NoSQL的方案。 

PS:RealTime Get 不是实时搜索,想要实现实时搜索功能的兄弟们要哭去了,me too。。。 看来要看下兄弟部门他们的实时搜索方案了。  不过值得高兴的是,Solr4.0在分布式方面,又迈出了很好的一步,虽然在某些分布式方案下,这种方案并没有用武之地。 


原文链接:http://hankesi2000.iteye.com/blog/1343601

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值