solr的使用过程中,大部分是query操作,很少用到事务,只知道在新增和删除时使用commit。
其中solr的commit又分为三种:
- 手动调用提交
- 自动提交
- 延时提交
其中每次手动操作完成之后调用commit的效率最低,但是无所谓,毕竟增删操作都是少数。
本文只研究手动调用提交
通过测试,solrClient的commit()方法可以协助我们来完成事务。
1、新增数据测试:
如下代码中test(),新增两个bean,分别为1和2,在commit之前,1和2都没有增加到solr索引中,commit之后,索引库中可以查询到1和2
2、删除数据测试:
如下代码中test1(),首先执行删除语句,没有commit,solr库中1依然存在,commit之后,索引库中可以查询到1变成了4
@Service public class TestService { @Autowired private SolrClient solrClient; public void test(){ SearchObject searchObject = new SearchObject(); searchObject.setId("1"); searchObject.setSearch_id("1"); searchObject.setSearch_name("1"); try { solrClient.addBean(searchObject); } catch (IOException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } SearchObject searchObject1 = new SearchObject(); searchObject1.setId("2"); searchObject1.setSearch_id("2"); searchObject1.setSearch_name("2"); try { solrClient.addBean(searchObject1); } catch (IOException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } try { solrClient.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void test2(){ String query = "search_id:1"; try { solrClient.deleteByQuery(query); } catch (IOException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } SearchObject searchObject1 = new SearchObject(); searchObject1.setId("1"); searchObject1.setSearch_id("4"); searchObject1.setSearch_name("4"); try { solrClient.addBean(searchObject1); } catch (IOException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } try { solrClient.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }