在solr中,实时搜索有3种方案

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

solr4.0 之后使用NRT的方法和需要的配置

方案1

使用soft commit达到近实时搜索的效果。

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

<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 onhard 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中)。

<!-- SoftAutoCommitPerform 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 lastsoft commit before automaticly triggering a new soft commit.maxTime - Maximum amount of time in ms that is allowed to passsince a document was added before automaticlytriggering 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并不一定能保证在你设置的时间内能立马搜索到最新的文档,通常会有秒级别的延迟。

方案 2

需要配置solrconfig.xml。其中两个地方需要修改

<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 onhard commit.  This is useful to minimize the size of transaction logs that keep track of
uncommitted updates. -->
</autoCommit>

此外还要配置solrconfig.xml的RealTimeGetHandler。根据solr的文档。该搜索Handler的接口为“/get”。该接口使用了一个特定的组件RealTimeGetComponent,该接口会通用solrCore的 getRealtimeSearcher()方法,后者会先搜索一下updateLog,再做普通搜索。

方案 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。比如,索引频繁而搜索量很小。

转载于:https://www.cnblogs.com/hwaggLee/p/4484208.html

Solr -- 实时搜索相关推荐

  1. 实时搜索 elasticsearch vs solr

    oyhk学习笔记 什么是ElasticSearch? ElasticSearch是基于rest风格,分布式搜索引擎,非常优秀的lucene库.内置的JSON API提供了一个优雅的+ HTTP平台完美 ...

  2. solr 近实时搜索

    摘要: Solr的近实时搜索NRT(Near Real Time Searching)意味着文档可以在索引以后马上可以被查询到.Solr不会因为本次提交而阻塞更新操作,不会等待后台合并操作(merge ...

  3. 持续定义Saas模式云数据仓库+实时搜索

    简介: 本文由阿里云计算平台事业部 MaxCompute 产品经理孟硕为大家带来<持续定义Saas模式云数据仓库+实时搜索>的相关分享.以下是视频内容精华整理,主要包括以下三个部分:1.W ...

  4. lucene4.5近实时搜索

    近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的c ...

  5. es mysql延迟_ES 近实时搜索 更新延迟问题

    一.问题发现 有段代码更新 ES中的数据状态,将未读置成已读.是查一批,更新一批,再查再更新. public Boolean updateDealStatus(WarningQuery warning ...

  6. 剖析Elasticsearch集群系列第三篇 近实时搜索、深层分页问题和搜索相关性权衡之道...

    http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03?utm_source=infoq&utm ...

  7. ELK学习1_开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索

    Logstash + Elasticsearch + Kibana+Redis+Syslog-ng ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于 ...

  8. ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并

    文章目录 集群内部原理 集群与节点 分片 选举 分片内部原理 索引不变性 动态更新索引 近实时搜索 事务日志 段合并 集群内部原理 集群与节点 一个运行中的Elasticsearch实例称为一个节点, ...

  9. solr中文搜索倒排索引和数据存储结构

    solr中文搜索倒排索引和数据存储结构 我们传统的方式(正排索引)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE.而Lucene的搜索则是 ...

  10. 开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索

    转载:http://my.oschina.net/HeAlvin/blog/378257 目录[-] 安装JDK 安装redis 安装Elasticsearch 安装logstash 安装kibana ...

最新文章

  1. 必须认识的http请求包
  2. 抽了几天用Flex写了个上传小工具,支持批量上传,支持配置
  3. What is the difference between BTD and Q35
  4. http协议客户端向服务器端请求时一般需要发送的内容
  5. ztree在刷新时第一个父节点消失_从反向传播推导到梯度消失and爆炸的原因及解决方案(从DNN到RNN,内附详细反向传播公式推导)...
  6. 网络协议分析(Network Protocol Analysis)之IPCP、认证协议PAP与CHAP
  7. Android在程序中浏览网页
  8. android其架构图,Android系统架构图,带你直观了解Android基本架构
  9. 正射影像、倾斜摄影测量相关软件汇总
  10. 广东法院公开裁判文书超350万份
  11. 计算机机箱最新推出的是什么架构,独特三舱位结构:LIANLI 联力 推出 PC-O12 E-ATX 全塔机箱...
  12. Unity 在安卓手机上实时调试
  13. 实验项目名称:微波技术与天线CST仿真实验
  14. http请求HttpServletRequest详解
  15. 申宝投资-指数上周五中阴杀跌
  16. 使用零信任思想构建的安全防御系统是什么样子的
  17. Java中arraylist和数组的相互转换
  18. 跟我学制作Pak文件
  19. totolinkn200up怎么设置_TOTOLINK EX300无线中继器设置说明
  20. JSP+MySQL校园新闻网站(5)–新闻查看功能开发

热门文章

  1. Omni Recover适用于哪些IOS数据恢复方案?
  2. Tenorshare iCareFone for mac如何修复iPhone手机系统?
  3. Spring IoC 的实现机制
  4. java使用document解析xml文件
  5. DataGrid相邻行有相同内容时对指定列合并和C#可以实现DLL库的动态调用
  6. AngularJS的 $resource服务 关于CRUD操作
  7. 二叉树 知道度 求节点数
  8. Windows Server 2008 R2之三管理活动目录数据库
  9. 云主机前景几何,风萧萧兮!
  10. Linux中RAID机制的实现