`
hankesi2000
  • 浏览: 97278 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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在分布式方面,又迈出了很好的一步,虽然在某些分布式方案下,这种方案并没有用武之地。

0
0
分享到:
评论
3 楼 jia_xiaoli 2013-01-04  
是否是因为没有执行 softCommit呢?

curl http://127.0.0.1:8009/solr/update?softCommit=true --data-binary  @money.xml -H 'Content-type:application/xml'
2 楼 jie8476343 2012-11-21  
用java调用怎么实现实时啊?
1 楼 huangfoxAgain 2012-02-27  
你们兄弟部分用lucene/solr实现了真正的实时?


相关推荐

    Solr 4.0 源代码实例

    Solr 4.0 是Apache Lucene项目的一个子项目,是一个高性能、全文本搜索服务器,为企业级数据提供强大的搜索功能。源代码实例是学习Solr内部工作原理和自定义功能的关键资源,尤其对于开发者而言,深入理解源码有助于...

    node-solr:Node.js 的 Solr 模块

    Node.js 的 Solr 模块参考Node.js: : Solr: : 使用npm test运行测试。 如果您没有在 127.0.0.1:8983 上运行 Solr,请编辑“test/common.js”。使用示例请参阅使用测试。 这是一个快速示例: var solr = require ( ...

    SolrSearch:将支持Solr的搜索界面添加到Omeka

    SolrSearch用由提供支持的...要使用该插件,您需要访问Solr 4.0+的安装,该安装运行solr-core/omeka下的插件源代码中包含solr-core/omeka 。 有关如何使用Solr进行启动和运行的一般信息,请查看官方。 安装 Solr核心 要

    (solr系列:五) solr定时实时重建索引和增量更新-附件资源

    (solr系列:五) solr定时实时重建索引和增量更新-附件资源

    puppet-ispconfig_solr:在 IspConfig 环境中使用的 solr 包装器

    puppet-ispconfig_solr == 定义:ispconfig_solr::instance 这个定义是 solr::instance 的包装器。 它创建一个 solr 实例并配置它以在 IspConfig 环境中使用 == 参数: [ instance_name ] solr 实例的名称。 实例...

    solr学习文档简介1

    2. 搜索索引:客户端(可以是浏览器可以是 Java 程序)用 GET 方法向 Solr 服务器发送请求,然后对 Solr 服务器返回 Xml、json 等格式的查询结果进行解析。 Solr 和 Lucene 的区别: Lucene 是一个开放源代码的...

    solr笔记solr笔记

    2. 搜索:客户端可以发送 get 请求到 Solr 服务器,请求 Solr 服务器给它响应一个结果文档。 Solr 的优点包括: 1. 高性能:Solr 可以快速处理大量数据,提供高性能的搜索和索引服务。 2. 灵活性:Solr 提供了一个...

    java8看不到源码-ansible-role-solr:yauh.solr-用于设置Solr的Ansible角色

    看不到源码Solr 引导程序 设置 Solr 搜索平台的 Ansible 角色 要求 系统上需要有Java,推荐角色yauh.java8。 角色变量 以下变量可与 solr 角色一起使用: solr_source: http://apache.openmirror.de/lucene/solr # ...

    Solr4.3.1:配置好的Solr,分词器使用IK

    Solr4.3.1配置好的Solr,分词器使用IK。使用步骤:拷贝solr目录到web服务器,如:tomcat的webapp目录下。拷贝solr_home到任意目录,如:/home目录下。修改solr目录中的web.xml,配置solr home的路径为:/home/solr_...

    Laravel-4-Solr:Apache Solr简单查询客户端

    Laravel 4 Apache Solr Laravel 4软件包提供了一个接口,用于通过其静态接口使用(查询) 。安装首先通过Composer安装此软件包。 编辑项目的composer.json文件,以要求davispeixoto/laravel-4-solr 。 "require": {...

    solr_solr_

    Solr,全称为Apache Solr,是一款开源的企业级搜索平台,由Apache软件基金会维护。它基于Java,并且是Lucene库的一个高级搜索应用。Solr主要用于处理和索引大量文本数据,提供高效的全文检索、拼写检查、命中高亮、...

    Linux上Solr的启动方式

    使用Solr内置的Jetty服务器启动Solr (1)借助X Shell上传solr的安装包到/usr/local/目录下,使用 tar -zxvf命令进行解压.  (2)使用内置的Jetty来启动Solr服务器只需要在example目录下,执行start.jar程序即可,...

    apache-solr-4.0.0-ALPHA-src.gz官方包

    源代码包"apache-solr-4.0.0-ALPHA-src.gz"包含了Solr 4.0的全部源代码,可以用于深入理解Solr的工作原理、内部架构以及核心功能。以下是关于这个源代码包的一些关键知识点: 1. **Solr 架构**:Solr采用分层架构,...

    配置了solr服务的tomcat

    List&lt;SolrDocument&gt; results = response.getResults(); for (SolrDocument doc : results) { System.out.println(doc); } ``` 以上就是配置 Solr 服务在 Tomcat 上运行并使用 SolrJ 进行数据交互的基本步骤。...

    lucene-solr:Apache Lucene和Solr开源搜索软件

    Apache Lucene和Solr Apache Lucene是用Java编写的高性能,功能齐全的文本搜索引擎库。 Apache Solr是使用Java编写并使用Apache Lucene的企业搜索平台。 主要功能包括全文搜索,索引复制和分片以及结果分面和突出...

    datagov-deploy-solr

    datagov-deploy-solr 该项目是一部分。 部署solr的角色。 用法 将此角色包括在您的requirements.yml 。 - src : https://github.com/gsa/datagov-deploy-solr.git 该角色取决于是否已安装Java。 我们建议在solr...

    solr -8.11.1.zip 文件

    solr -8.11.1.zip 文件

    开源bbs源码java-solr:索尔

    安装好ik分词器与拼音分词器的solr 版本: jdk1.8 solr6.0.1 tomcat8 使用说明 clone 代码 https://github.com/tomoya92/solr.git 打开 apache-tomcat-8.0.35/webapps/solr/WEB-INF/web.xml 修改 {solr_home} 为...

Global site tag (gtag.js) - Google Analytics