solr事务提交

solr的使用过程中,大部分是query操作,很少用到事务,只知道在新增和删除时使用commit。

其中solr的commit又分为三种:

  1. 手动调用提交
  2. 自动提交
  3. 延时提交

其中每次手动操作完成之后调用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();
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值