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

配置solrconfig.xml

创建索引时需要指定配置集config set,配置集中的solrconfig.xml文件可以用来控制索引数据的可见性。

  • soft commit
    <autoSoftCommit>  
       <maxTime>${solr.autoSoftCommit.maxTime:15000}</maxTime>
    </autoSoftCommit>
    数据写入默认15秒后可以查询。
  • hard commit
    <autoCommit>  
      <maxTime>${solr.autoCommit.maxTime:30000}</maxTime>  
      <openSearcher>false</openSearcher>
    </autoCommit>
    数据写入默认30秒后刷新到磁盘中。
说明
  1. soft commit的时间要小于hard commit时间。
  2. 一般不建议配置较小的时间,这会导致服务端频繁刷新和open searcher,影响写入性能。采用默认值即可。

如何生效

  1. 下载需要修改的配置集。
  2. 修改soft commithard commit的时间。
  3. 更新配置集。
    ./solr zk upconfig -d conf/ -n myconf
  4. Reload CollectionSOLR reload英文_1

客户端参数

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

  • commitWithinMs
    // 第二个参数commitWithinMs可以控制当前写入的数据多久后可以查询
    public UpdateResponse add(SolrInputDocument doc, int commitWithinMs) throws SolrServerException, IOException;

    例如:代表10秒后数据可查询。

    cloudSolrClient.add(doc, 1000);
  • commit API
    // 写完数据后,显示调用commit接口,让服务端在多久后执行commit,保证数据可查询
    public UpdateResponse commit(boolean waitFlush, boolean waitSearcher, boolean softCommit) throws SolrServerException, IOException;

    例如:服务端立即执行soft commit。

    cloudSolrClient.commit(false, false, true);

参考文档

UpdateHandlers in SolrConfig