背景
现有开源搜索引擎主要有es和solr;es更适合近实时查询,在批量文档更新插入时的查询效率依然很高;
solr在这方面要逊色一些,但是查询的稳定性更好,适合作为企业级搜索框架来使用。
关于solr在4 版本之后增加了,软提交,加快了index速度。
在solr 提交文档常用的主要分为soft commit 和 hard commit以及CommitWithin。
问题
网上solr入门大部分例子中 在添加文档时会有 add 以及commit

这样做 在文档进行全量更新的时候 会很耗性能:log中会报错,如下:

原因
主要的原因如下
如果每次添加文档都手动commit,会开一个新的searcher,而searcher是占内存的,不能开太多。配置文件里配置了searcher的上限,就会报“maxWarmingSearchers exceeded limit”;searcher的概念在后续文章会共享。
通过查看源码发现,add方法 已经把文档上传给solr服务端

那如果业务场景 不是很苛刻,就没有必要每次add时 手动commit了。solr也正好提供了soft commit的方式来解决。
hard commit机制
把内存中的索引文件同步到磁盘。可以实时查看到提交的文档。即使服务器挂了,也不影响这部分索引。
会开启一个新的searcher。很耗资源
soft commit机制
softCommit和NRTCachingDirectoryFactory关系紧密
用这种方式提交后也就是说原索引和现在的索引不同步,如果服务器挂了,那这部分索引就没了。
解决方案
如果需求是在提交后就能立马检索到,就要对每次增量的更新soft commit,定时或者定量去执行一次hard commit。operSearcher为true,要不如果读的是旧的缓存,那么新的文档是无法被检索到。

转载于:https://my.oschina.net/u/3240397/blog/831282
分享到:
相关推荐
6.7 Updates and Commit Frequency Tradeoffs 6.8 Query Response Compression 6.9 Embedded vs HTTP Post 6.10 RAM Usage Considerations 6.10.1 OutOfMemoryErrors 6.10.2 Memory allocated to the Java VM **七...
ASP.NET调用Solr是一个常见的任务,特别是在构建高效的企业级搜索解决方案时。Solr是Apache Lucene项目的一个分支,是一个开源、高性能的全文搜索引擎。它提供了丰富的查询语法、高效的索引和检索能力,以及灵活的...
请求格式通常为`http://localhost:8983/solr/core_name/update?commit=true`,其中`core_name`是你的核心名,请求体包含JSON或XML格式的文档数据。 2. **删(Delete)**:同样通过HTTP API,可以删除单个文档或根据...
solr.commit(); ``` - 查询文档:使用 `query` 方法执行搜索查询。 ```java SolrQuery query = new SolrQuery("*:*"); query.setRows(10); QueryResponse response = solr.query(query); SolrDocumentList ...
solr.commit(); ``` - 查询示例代码(简化版): ```java SolrQuery query = new SolrQuery("*:*"); QueryResponse response = solr.query(query); SolrDocumentList results = response.getResults(); for ...
solr.commit(); ``` - 查询文档: ```java SolrQuery query = new SolrQuery("title:Solr"); QueryResponse response = solr.query(query); List<SolrDocument> results = response.getResults(); for (Solr...
3. **提交更改**: 添加或更新文档后,需调用`commit`方法使更改生效,`client.commit();` 4. **查询**: 通过`SolrQuery`构建查询,`SolrQuery query = new SolrQuery("query");`,然后使用`query.set("q", "query")...
默认情况下,Solr将更改存储在内存中,直到接收到commit命令才会写入磁盘。可以设置`<autoCommit>`来控制自动提交的文档数和最大等待时间。 - `highlighting`:配置高亮显示,如更改默认的高亮标签`<em></em>`。 2...
client.commit(); ``` 对于查询操作,你可以使用`SolrQuery`类来构造查询条件,然后调用`query()`方法执行查询: ```java SolrQuery query = new SolrQuery(); query.setQuery("title:solr"); QueryResponse ...
- **6.7 Updates and Commit Frequency Tradeoffs**:更新频率与提交频率之间的权衡。 - **6.8 Query Response Compression**:启用查询响应压缩以减少网络传输开销。 - **6.9 Embedded vs HTTP Post**:对比嵌入式...
同时,Solr提供了Tlog(事务日志)和ZK-based Commit Points机制,保证数据的一致性。 8. **监控与性能调优**:Solr提供了监控接口,可以通过JMX或Solr的Admin UI查看系统状态、统计信息和查询性能。通过对索引结构...
solr.commit(); // 执行搜索 SolrQuery query = new SolrQuery("*:*"); query.setRows(10); QueryResponse response = solr.query(query); // 处理搜索结果 for (SolrDocument document : response.get...
在索引和基本数据操作章节中,手册详细描述了索引过程和基本索引操作,比如提交(commit)、优化(optimize)和回滚(rollback)。这些操作对于管理Solr中的数据集和维持搜索索引的健康状态是非常重要的。对于希望...
<str name="replicateAfter">commit <str name="replicateAfter">startup <str name="confFiles">schema.xml,stopwords.txt ``` - **从服务器配置**:在从服务器(如`tomcat1`和`tomcat2`)的SolrHome目录...
solrServer.commit(); // 提交更改 SolrQuery query = new SolrQuery("searchTerm"); SolrResponse response = solrServer.query(query); ``` 接下来,我们转向Redis。Redis以其高速度和丰富的数据结构(如字符串、...
### Solr创建索引并查询的关键知识点 #### 一、Solr简介 Apache Solr是一款开源的全文搜索引擎平台,基于Lucene实现。它提供了一套完整的搜索解决方案,并且支持多种高级特性,如高亮显示、分面搜索、地理位置搜索...
client.commit(); // 查询操作... client.close(); } } ``` - 这段代码创建了一个文档并将其添加到索引,然后提交更改。 总结,本文详细介绍了如何在Windows 7环境下安装配置Solr 4.1,包括JDK和Tomcat的...
Solr 是一个流行的开源全文搜索引擎,它允许开发者通过配置来实现高效的搜索功能。在Solr中,连接数据库是一项重要的配置,这使得我们可以将数据库中的数据导入到Solr中,以便进行快速检索。这篇博客“solr连接...
例如,使用POST请求将JSON格式的文档提交到`http://localhost:8983/solr/collection1/update?commit=true`,其中`collection1`是索引库名。 - **删除文档**:同样使用`/update`接口,通过指定文档ID来删除文档。...
使用`SolrClient`类创建客户端实例,通过`addDocument()`, `commit()`, `search()`等方法进行索引管理和查询操作。 总的来说,安装PHP扩展Solr-1.0.1涉及多个步骤,包括系统环境的准备、源码的获取与编译,以及最后...