Solr 4.0: Realtime GET
前端之家收集整理的这篇文章主要介绍了
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>