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();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/lihongjing/article/details/88420799