摘要: Solr的近实时搜索NRT(Near Real Time Searching)意味着文档可以在索引以后马上可以被查询到。

Solr不会因为本次提交而阻塞更新操作,不会等待后台合并操作(merge)的完成而是直接检索索引并返回数据。参见原文

利用NRT,就可以设置soft commit,因为标准的commit操作代价高昂,soft commit可以做到近乎实时的查询效果而不丢失数据。

Commits 与 Optimizing

一个commit操作可以使新的查询请求能够感知到索引的变化,一般使用的 hard commit通过事务的方式确保数据是最新的,并且会有同步方法(fsync)的调用确保数据能持久化。而soft commit效率高是因为没有调用同步方法,这样的话,一旦JVM崩溃,可能会丢失数据。使用NRT可以使Solr多做soft commit而少一点hard commit

我们所使用的optimize很像hard commit,不同的是它会强制将所有的索引片段合并为一个。一般我们很少使用它,因为它会重写整个索引。正常情况下,片段合并会根据配置自动进行,调用optimize只是手动加快了这一进程。

对于soft commit,常用下面两个参数:

参数 说明
maxDocs int型,每多少个文档push到索引一次
maxTime long型,每多少毫秒push到索引一次

Auto commit

使用autocommit也可以使用上面两个参数maxDocsmaxTime

一般,设置autocommit为每1-10分钟一次,设置autosoftcommit为每秒一次。这样的话,新的文档就可以在1秒内被添加到索引,就算出现意外,丢失的数据也只是上一次hard commit之后添加的数据。

<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>

这是一段commit的配置,从经验角度,配置maxTime参数比maxDocs效果好,尤其是索引量很大的时候。一般还建议对于批处理的索引请求关闭autoSoftCommit功能。

其他的参数

参数 参考值(默认) 说明
waitSearcher 布尔(true) 新的搜索器打开并注册为主查询搜索器之前,是否阻塞查询
softCommit 布尔(false) 是否执行softCommit
expungeDeletes 布尔(false) 仅针对commit,是否清理掉已经delete的数据
maxSegments 整数(1) 优化为多少个片段segments

下面就是一个配置片段:

<commit waitSearcher="false"/>
<commit waitSearcher="false" expungeDeletes="true"/>
<optimize waitSearcher="false"/>

在URL中使用commit参数

下面的URL使用了commit操作使得测试文档被插入后可以立即生效:
http://localhost:8983/solr/core0/update?stream.body=<add><doc>
<field name="id">testdoc</field></doc></add>&commit=true

接下来,你可能会用到下面这个URL:
http://localhost:8983/solr/core0/update?stream.body=<optimize/>

还可以添加更多的参数,比如优化为10个片段,不需要等待操作结束:

http://localhost:8983/solr/core0/update?optimize=true&maxSegments=10&waitFlush=false

改变默认的commitWithin行为

参数commitWithin会使文档在一个确定的时间段内commit,因此常常用于NRT检索。但是,对于master/slave
环境,可能会导致新的文档不能复制到slave中(因为只有commit操作才会触发复制机制,softcommit不会使
replicate生效)。如果你需要这样的做,那就只能使用hard commit了,例如:

<commitWithin>
<softCommit>false</softCommit>
</commitWithin>

solr 近实时搜索的更多相关文章

  1. Lucene.net 实现近实时搜索(NRT)和增量索引

    Lucene做站内搜索的时候经常会遇到实时搜索的应用场景,比如用户搜索的功能.实现实时搜索,最普通的做法是,添加新的document之后,调用 IndexWriter 的 Commit 方法把内存中的 ...

  2. Lucene系列-近实时搜索(1)

    近实时搜索(near-real-time)可以搜索IndexWriter还未commit的内容,介于immediate和eventual之间,在数据比较大.更新较频繁的情况下使用.本文主要来介绍下如何 ...

  3. lucene4.5近实时搜索

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

  4. 【Lucene】近实时搜索

    近实时搜索:可以使用一个打开的IndexWriter快速搜索索引的变更内容,而不必首先关闭writer,或者向该writer提交:这是2.9版本之后推出的新功能. 代码示例(本例参考<Lucen ...

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

    转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03 近实时搜索 虽然Elasticsearch ...

  6. lucene4之后的近实时搜索实现

    好久没干这块东西了,近几天须要做这个.所以又一次学了一下.首先很感谢孔浩老师,没孔浩老师的视频我也不会进入lucene的殿堂. 老师当时讲的实时搜索还是NRTManager,如今已经都变了,这个类已经 ...

  7. Solr -- 实时搜索

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

  8. 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml

    来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...

  9. 【搜索引擎】Solr全文检索近实时查询优化

    设置多个搜索建议查找算法 <searchComponent name="suggest" class="solr.SuggestComponent"> ...

随机推荐

  1. 洛谷P1083 借教室

    P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...

  2. Unity---UNet学习(2)----简单mmo游戏实现

    1.实现步骤 新建空物体Controller,添加Network Manager.HUD组件. 创建Player模型,添加Inentity组件. Player添加脚本控制移动,只有当为本地用户才执行. ...

  3. JML契约式设计——第三单元学习小结

    一.前言 本单元作业都是关于JML(Java Modeling Language),JML是一种契约式设计(Design by Contract)的语言,契约式设计的主要目的是希望程序员能够在设计程序 ...

  4. SP375 QTREE - Query on a tree

    题意大意 给定\(n\)个点的树,边按输入顺序编号为\(1,2,...n-1\),要求作以下操作: CHANGE \(i\) \(t_i\) 将第\(i\)条边权值改为\(t_i\),QUERY \( ...

  5. vue实现复制功能(项目使用)

    安装依赖 npm install --save vue-clipboard2 用法: import Vue import VueClipboard from 'vue-clipboard2' Vue. ...

  6. Python网络编程(一)

    最近在啃<python核心编程(第三版)>,感觉这本书并不是特别的友好,虽然有基于python3提出的改进代码:但是整书的基准感觉还是在python2.7.所以python3的代码中还是有 ...

  7. nagios客户端之nrpe3.2.1安装(Ubuntu)

    1.删除dpkg安装的nrpedpkg -l | grep nrpedkpg -P nagios-nrpe-server 2.ubuntu下nrpe3.2.1安装 下载nrpe3.2.1的源码包:ht ...

  8. BZOJ 4919: [Lydsy1706月赛]大根堆 启发式合并

    我不会告诉你这是线段树合并的好题的... 好吧我们可以搞一个multiset在dfs时求出LIS(自带二分+排序)进行启发式合并,轻松加愉悦... #include<cstdio> #in ...

  9. Oracle快速插入数据append

    1:用merge into 进行匹配更新和插入,2: 开启并行,提高速度3: 如果可以的话加NOLOGING 不写入日志4:如果数据有规律的话,分批次执行 1.使用marge快速插入; MERGE / ...

  10. spring技术小结

    1.DI和IOC 依赖注入(Dependency Injection)还是控制反转(Inversion of Conctrol) bean通过依赖注入,注册到spring容器里面.spring容器通过 ...