solr 近实时搜索
摘要: 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也可以使用上面两个参数maxDocs和maxTime。
一般,设置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 近实时搜索的更多相关文章
- Lucene.net 实现近实时搜索(NRT)和增量索引
Lucene做站内搜索的时候经常会遇到实时搜索的应用场景,比如用户搜索的功能.实现实时搜索,最普通的做法是,添加新的document之后,调用 IndexWriter 的 Commit 方法把内存中的 ...
- Lucene系列-近实时搜索(1)
近实时搜索(near-real-time)可以搜索IndexWriter还未commit的内容,介于immediate和eventual之间,在数据比较大.更新较频繁的情况下使用.本文主要来介绍下如何 ...
- lucene4.5近实时搜索
近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的c ...
- 【Lucene】近实时搜索
近实时搜索:可以使用一个打开的IndexWriter快速搜索索引的变更内容,而不必首先关闭writer,或者向该writer提交:这是2.9版本之后推出的新功能. 代码示例(本例参考<Lucen ...
- 剖析Elasticsearch集群系列之三:近实时搜索、深层分页问题和搜索相关性权衡之道
转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03 近实时搜索 虽然Elasticsearch ...
- lucene4之后的近实时搜索实现
好久没干这块东西了,近几天须要做这个.所以又一次学了一下.首先很感谢孔浩老师,没孔浩老师的视频我也不会进入lucene的殿堂. 老师当时讲的实时搜索还是NRTManager,如今已经都变了,这个类已经 ...
- Solr -- 实时搜索
在solr中,实时搜索有3种方案 ①soft commit,这其实是近实时搜索,不能完全实时. ②RealTimeGet,这是实时,但只支持根据文档ID的查询. ③和第一种类似,只是触发softcom ...
- 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml
来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...
- 【搜索引擎】Solr全文检索近实时查询优化
设置多个搜索建议查找算法 <searchComponent name="suggest" class="solr.SuggestComponent"> ...
随机推荐
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- Task :rn-splash-screen:verifyReleaseResources FAILED
Execution failed for task ':rn-splash-screen:verifyReleaseResources'. > java.util.concurrent.Exec ...
- AT2348 HonestOrUnkind
传送门 显然\(a>b\)的情况下才有解 考虑先找出一个诚实的人,然后剩下的都可以在\(n\)次以内问出来了 发现如果一个人说另一个人是说谎的那么这两个人必有一个是说谎的,由于诚实的人严格多于不 ...
- PowerDesigner如何将字段的注释显示出来
选定一个编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comme ...
- haoi2018奇怪的背包题解
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5302 对于一个物品,设它体积为v,那么,在背包参数为p的情况下,它能达到gcd(v,p ...
- 1101 Quick Sort(25 分
There is a classical process named partition in the famous quick sort algorithm. In this process we ...
- avro-maven-plugin
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- BufferedReader readLine
import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.digest.DigestUtils; In ...
- QT 商业版调用activex插件
搭建好qt项目后 在main.cpp中写入如下代码 #include "test.h" #include <QtWidgets/QApplication> #inclu ...
- ubuntu apache2 https
1. enable the module ssl by: sudo a2enmod ssl 2.after you have enabled module ssl , you will have to ...