全部产品
云市场

索引数据可见性

更新时间:2020-04-08 15:38:48

写入Solr中的数据,只有等到commit才是可见的,何时执行commit是需要配置的,当前有两种commit方式:soft commit、hard commit。

solrconfig.xml中的配置

Collection在创建时需要指定配置集,其中的solrconfig.xml文件可以用来控制索引数据的可见性。如何获取solrconfig.xml可参考

soft commit

  1. <autoSoftCommit>
  2. <maxTime>${solr.autoSoftCommit.maxTime:15000}</maxTime>
  3. </autoSoftCommit>

写入的数据多久后可以查询,默认是15秒。

hard commit

  1. <autoCommit>
  2. <maxTime>${solr.autoCommit.maxTime:30000}</maxTime>
  3. <openSearcher>false</openSearcher>
  4. </autoCommit>

写入的数据多久后刷新到磁盘中,默认是30秒。

  1. 1. soft commit的时间要小于hard commit时间
  2. 2. 一般不建议配置较小的时间,这会导致服务端频繁刷新和open searcher,影响写入性能。采用默认值即可。

如何生效

  1. 下载需要修改的配置集,参考

  2. 修改soft commithard commit的时间

  3. 更新配置集
    1. ./solr zk upconfig -d conf/ -n myconf
  4. Reload Collectionreload_collection

客户端参数

如果不想修改服务端的solrconfig.xml文件,在单独写入Solr时可以显示的调用commit来达到数据可见的目的。

commitWithinMs

  1. // 第二个参数commitWithinMs可以控制当前写入的数据多久后可以查询
  2. public UpdateResponse add(SolrInputDocument doc, int commitWithinMs) throws SolrServerException, IOException;
  3. 例如:代表10秒后数据可查询。
  4. cloudSolrClient.add(doc, 1000);

commit API

  1. // 写完数据后,显示调用commit接口,让服务端在多久后执行commit,保证数据可查询
  2. public UpdateResponse commit(boolean waitFlush, boolean waitSearcher, boolean softCommit) throws SolrServerException, IOException;
  3. 例如:服务端立即执行soft commit
  4. cloudSolrClient.commit(false, false, true);

参考文档

https://lucene.apache.org/solr/guide/7_3/updatehandlers-in-solrconfig.html#updatehandlers-in-solrconfig