`
qindongliang1922
  • 浏览: 2184138 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117538
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125926
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59915
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71301
社区版块
存档分类
最新评论

solr实时思路

阅读更多


【转】http://www.tnove.com/?p=331

在solr中,实时搜索有3种方案,①soft commit,这其实是近实时搜索,不能完全实时。②RealTimeGet,这是实时,但只支持根据文档ID的查询。③和第一种类似,只是触发softcommit。综上,其实是由实时(②)和近实时(①③)两种。


本文主要介绍solr4.0 之后使用NRT的方法和需要的配置,同时介绍下commit相关的一些命令的使用效果
NRT方案 1

     使用soft commit达到近实时搜索的效果。http://sling2007.blog.163.com/blog/static/84732713201391745435121/这里可以看到为什么是近实时搜索。

为了使用soft commit ,我们需要配置solrconfig.xml。其中两个地方需要修改

     a.

<autoCommit>
      <maxDocs>10000</maxDocs> <!-- maximum uncommited docs before autocommit triggered -->
      <maxTime>15000</maxTime> <!-- maximum time (in MS) after adding a doc before an autocommit
is triggered -->
      <openSearcher>false</openSearcher> <!-- SOLR 4.0.  Optionally don't open a searcher on
hard commit.  This is useful to minimize the size of transaction logs that keep track of
uncommitted updates. -->
    </autoCommit>

        这里需要将hard commit 的 openSearcher改为true。Hard commit时间根据自己系统承载能力和需要设置。因为hard commit动作较大,对性能有较大影响。原则稍长较好,但又不能太长,以免突然断电导致大量数据丢失(hard commit前数据都在memery中)。

      b.

<!-- SoftAutoCommit
         Perform a 'soft' commit automatically under certain conditions.
         This commit avoids ensuring that data is synched to disk.
         maxDocs - Maximum number of documents to add since the last
                   soft commit before automaticly triggering a new soft commit.
         maxTime - Maximum amount of time in ms that is allowed to pass
                   since a document was added before automaticly
                   triggering a new soft commit.
      -->
     <autoSoftCommit>
       <maxTime>2000</maxTime>
     </autoSoftCommit>

       将soft commit 打开(默认配置注释了该节点),这里的时间是你希望在几秒内搜到,此处我的设置为2s。可根据需要设置,值越小NRT效果越好,相反的,会带来性能上的影 响。如果索引请求量不是特别大,则可以将值设小点,比如1000.不建议小于1000,小于1000并没有意义。

      设置a,b之后就可通过普通的SearchHandler 搜到到了。Solr 默认配置的SearchHandler REST接口有“/select”“/query”“/browse”。

      值得注意的是:当索引请求量巨大时,solr并不一定能保证在你设置的时间内能立马搜索到最新的文档,通常会有秒级别的延迟。
NRT方案 2

         另外一种使用NRT的方法同样需要配置NRT1中的a项。

         此外还要配置solrconfig.xml的RealTimeGetHandler。根据solr的文档。该Handler有如下特性:

realtime get handler, guaranteed to return the latest stored fields of any document,
without the need to commit or open a new searcher.  The current implementation relies
on the updateLog feature being enabled.


该搜索Handler的接口为“/get”。该接口使用了一个特定的组件RealTimeGetComponent,该接口会通用solrCore的 getRealtimeSearcher()方法,后者会先搜索一下updateLog,再做普通搜索。至于该接口是否有效,作者还没使用过。
NRT方案 3

          第3种使用NRT的方法依然需要配置NRT1中的a项。这次使用普通的SearchHandler来实现NRT。利用solr的commit和 commitwithin。实现方式是每次索引文档后都明确的发送一个commit或者commitwithin命令。这样也可以马上搜索刚索引的数据。 由于发送命令需要走网络,时间上有不确定性,总体速度也不如NRT1。这里commit为hard commit请求,方法为commit=true;commitwithin为softcommit请求,方法为commitwithin=2000. 从前所述可以看出同样是commit,是用commitwithin将能更快搜到新文档,此处表示2s内要完成softcommit。该方法灵活性较高, 适合在一些特殊情况下使用。

综上,虽然我们可以通过不同手段(包括变相的手段NRT3)来实现NRT。但NRT1中的配置softcommit的方式才是最佳选择,这也是其存在的价值。但是在一些特殊的应用场景可以根据需要使用NRT3。比如,索引频繁而搜索量很小。
solrj客户端


如果我们使用solrj的客户端操作,

执行下面操作的时候

server.add(docs);

server.commit();

可以看到后台日志的默认参数是:

optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false

用下面的方式操作的时候

UpdateRequest req = new UpdateRequest();
        req.setCommitWithin(60000);
        req.add(docs);
        UpdateResponse res = req.process(server);

可以看到,默认参数是:

optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=true
主要的不同在于softCommit的参数。
当然也可以用org.apache.solr.client.solrj.request.AbstractUpdateRequest.setAction(ACTION action, boolean waitFlush, boolean waitSearcher)来逐个设置。


Commit

上面提到的commit,其实在NRT及非NRT的情况下都会涉及到。Solr支持的commit 方式有两种。并且在不同情况下会有些有趣的情况出现。下面我们就介绍下几种commit的case。

    直接在发送commit=true或commitwithin=2000的参数提交commit请求。
    发送索引内容为的索引数据 。这种情况下可以对commit进一步设置参数:

    waitFlush = "true" | "false" — default is true — block until index changes are flushed to disk
    waitSearcher = "true" | "false" — default is true — block until a new searcher is opened and registered as the main query searcher, making the changes visible.
    softCommit = "true" | "false" — default is false — perform a soft commit - this will refresh the 'view' of the index in a more performant manner, but without "on-disk" guarantees
    expungeDeletes = "true" | "false" — default is false — merge segments with deletes away.

注:waitFlush在solr1.4之前支持,4.0之后已被取消。

例子:

   3. 发送普通索引数据的同时带上commit参数。

例子:curl http://localhost:8983/solr/update?commitWithin=3000 -H "Content-Type: text/xml" --data-binary 'testdoc'

        Case 3存在一个特殊例子,值得注意:当发送该 类型请求到leader节点,所有replica节点将可以马上搜索到该请求的文档。如果请求发送至replica节点,马上搜索该replica节点将 不能搜索到,需要等待下一个commit命令才能搜索到,而其它replica不确定能否搜到(可能搜到也可能不能)。即solr允许leader和 replica节点数据的短时间的不一致。下一次commit后所有节点数据会一致被搜到该文档。导致这种case的原因是,索引数据需要首先由 leader处理,再到replica,所以发给任何replica的数据都需先转发给leader。而收到commit的replica则直接处理并发 给其它replica(包括leader)处理。
Optimize

Optimize 是一种特殊的commit。它除了做commit还会做索引的合并,所以其代价远大于commit命令。

  由于optimize也是先做commit,所以它支持commit的前3个参数。另外还有一个它自己独有的参数

    maxSegments = N — default is '1' — optimizes down to at most this number of segments

prepareCommit

               用法prepareCommit=true 。该命令调用lucene的prepareCommit方法.如果对lucene 不够了解建议不要使用
分享到:
评论
1 楼 Owen292 2014-10-17  
高大上的文章!

相关推荐

    solr资料以及问题汇总

    首先,"eContact+V3.5(3.5.7.4Q1)Solr檢索附件需求分析書V1.0-ZhaoHaiming20100415.docx"文件可能是关于一个特定项目中Solr的检索附件需求分析,可能涵盖了如何利用Solr进行文档检索和管理的需求和设计思路。...

    Apache Solr最新版任意文件读取0day1

    0x04 厂商防护及绕过思路 为了防止此类攻击,建议将Apache Solr部署在内部网络中,以限制外部访问。同时,必须配置身份验证和授权机制,确保只有经过身份验证的用户才能执行操作。由于Solr的路由结构相对固定,可以...

    mmseg4j-solr-2.2.0-with-mmseg4j-core.zip

    该库的设计思路是在保证分词质量的同时,兼顾了性能的需求,使得在大数据量的环境下依然能够快速地进行分词处理。 在这个压缩包中,包含的两个核心文件mmseg4j-core-1.10.0.jar和mmseg4j-solr-2.2.0.jar是实现Solr...

    基于Solr4.9.0的搜索系统:包括Solr索引建立、Solr索引查询DUBBO接口等内容。.zip

    同时,MySQL与Solr的结合,可以通过Elastic Data Bridge等工具,实现数据的实时同步,确保索引的实时性。 压缩包中的`content_code`文件包含了整个系统的源代码,开发者可以参考这些代码,理解系统的设计思路和实现...

    高性能分布式搜索引擎Solr的研究与实现.pdf

    接着,文章提出了一个基于Solr的分布式搜索引擎架构,并详细描述了该架构的设计思路和实现方法。 关键词包括:Solr、SolrCloud、Zookeeper、Mongodb。这些关键词指向了构建高性能分布式搜索引擎所需的各个关键组件...

    solr-ref-guide-zh:Apache Solr 官方参考手册

    本文档是Apache Solr项目官方参考文档4.10()的中文翻译版,旨在方便大家学习和使用Solr,Solr官方手册能够系统完整的介绍Solr的功能,模块介绍得详细可操作,可以了解设计思路和最佳实践,对Solr有更加准确完整的...

    电商项目solr实战

    并发解决方案的思路,如果你是开发的小白,建议你学完Spring,SpringMVC,MyBatis框架后再来学习本门课程,学完以后会让你完全体验到企业级开发的流程.在职开发人员学完后会让你的薪资更高,让你更了解互联网是如何解决高...

    Solr通过特殊字符分词实现自定义分词器详解

    三、分词思路 Solr的`schema.xml`配置文件中,`text_ws`字段类型使用`WhitespaceTokenizerFactory`,其按照空格进行分词。我们可以以此为蓝本,创建一个以竖线为分词依据的`MyVerticalLineTokenizerFactory`。我们...

    solr高级应用高亮显示高级搜索

    本课程全程使用目前比较流行的开发工具idea进行开发,涉及到目前互联网项目中最常用的高并发解决方案技术, 如 dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,spring...

    python 动态迁移solr数据过程解析

    思路: collection数据量比较大,所以一次性操作所有数据太大,于是分段执行操作。 先分段 按1000条数据量进行查询,处理成json数据 把处理后的json数据 发送到目的collection上即可 实现: 一、使用http的接口先...

    仿京东商城项目

    6. **实时性**:理解Solr如何处理实时索引和搜索,确保新添加的商品能够立即被搜索到。 7. **监控和日志**:了解如何使用Solr的监控工具(如SolrCloud的Zookeeper UI)来监控系统的运行状态,以及如何设置日志以...

    solifeSearch:所以生活源代码(solr搜索)服务器

    总的来说,SolifeSearch项目展示了如何将开源的Apache Solr搜索引擎技术应用于实际的生活服务场景,通过源代码的学习,开发者可以深入理解Solr的工作机制,并借鉴其设计思路来解决自己项目中的搜索问题。

    solr站内搜索引擎

    本课程全程使用目前比较流行的开发工具idea进行开发,涉及到目前互联网项目中最常用的高并发解决方案技术, 如dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,spring...

    ujxlwe_SolrPhpClient_nl2tzx.rar

    标题中的"ujxlwe_SolrPhpClient_nl2tzx.rar"表明这是一个关于Solr PHP客户端的压缩包,其中可能包含用于与Apache Solr搜索引擎进行...对于有经验的开发者,这些资源可能提供了优化现有Solr集成或扩展其功能的新思路。

    基于SpringBoot框架仿stackOverflow网站后台开发+源代码+文档说明

    压力测试思路、单元测试 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校...

    品优购_day10_搜索业务规则_V1.31

    \n- **过滤查询**:根据用户选择的过滤条件,动态更新查询参数,实时展示过滤后的搜索结果。\n\n4. Solr搜索解决方案\n\nSolr作为开源的企业级搜索平台,提供了丰富的搜索和索引功能,适用于品优购这样的电商系统。...

    搜索引擎的研究与实现(Java)(含源码)

    2. Solr和Elasticsearch:基于Lucene的高级搜索引擎服务,Solr适合企业级搜索,而Elasticsearch则以其分布式特性、实时分析和易用性受到广泛欢迎。两者都可以提供更强大的搜索和分析能力,适合大型数据集的处理。 ...

    基于javaweb_SSM的虚拟资源共享平台的设计与实现毕业设计论文.doc

    这要求学生具备良好的文献检索技巧,能够系统地整理和表达技术思路,以及设计过程。 【主要参考文献】 论文引用的参考资料涵盖了Java EE技术、软件工程理论、Spring框架、MVC设计模式、数据库优化、并发编程等多个...

    高某某 软件开发工程师3年_嵌入式_java简历_程序员简历模板_计算机相关专业.doc

    此外,该简历还强调了高某某的自我评价,包括学习能力强、思路清晰、对细节难题具备快速钻研解决能力、对工作热心、积极、乐于从事挑战性工作等。 以下是该简历中的知识点: 1. Java 基础知识:包括 Java 语法、...

    模仿国内知名B2C网站,实现的一个分布式B2C商城

    《构建分布式B2C商城:基于Spring Boot与热门技术栈的实践》 在当今的电商领域,构建一个高效、稳定且可扩展的B2C(Business-...这样的设计思路和实践,对于任何想要构建类似系统的开发者来说,都具有很高的参考价值。

Global site tag (gtag.js) - Google Analytics