Solr REST操作:增删改查

     在使用solr时,对solr进行操作可以solr4j直接操作,但在对solr multicore进行操作时(如数据库分表)有些不方便,因此尝试了直接采用REST形式进行操作

public class SolrServiceImpl implements SolrService {

    @Override
    public boolean addIndex(List<Program> list) { 
        JSONArray array = new JSONArray();
        for (Program p : list) {
            JSONObject object = new JSONObject();
            object.put("id", p.getId());
            object.put("name", p.getName());
            array.add(object);
        }
        String result = HttpUtils.httpPost("http://localhost:8080/solr/update?commit=true", array.toString());
        JSONObject resultObj = JSON.parseObject(result);
        int status = resultObj.getJSONObject("responseHeader").getIntValue("status");
        return status == 0;
    }

    @Override
    public boolean addIndex(Program program) {
        List<Program> list = new ArrayList<>();
        list.add(program);
        return addIndex(list);
    }

    @Override
    public boolean updateIndexById(Program program) {
        List<Program> list = new ArrayList<>();
        list.add(program);
        return addIndex(list);
    }

    @Override
    public boolean deleteIndex(long id) {
        //{"delete":[ {"id":"3"}}
        JSONObject idObj = new JSONObject();
        idObj.put("id", id);
        JSONObject delObj = new JSONObject();
        delObj.put("delete", idObj);
        String result = HttpUtils.httpPost("http://localhost:8080/solr/update?commit=true", delObj.toString());
        JSONObject resultObj = JSON.parseObject(result);
        int status = resultObj.getJSONObject("responseHeader").getIntValue("status");
        return status == 0;
    }

    @Override
    public SolrResult select(List<Integer> websiteIds, String keyword, int start, int num) {
        SolrResult solrResult = new SolrResult();
        String result = HttpUtils.httpGet("http://localhost:8080/solr/select?q=*:*&wt=json&start"+start+"&rows="+num);
        if (StringUtils.isNotEmpty(result)) {
            JSONObject jsonObject = JSON.parseObject(result);
            JSONObject respObj = jsonObject.getJSONObject("response");
            if (respObj != null) {
                int totals = respObj.getIntValue("numFound");
                solrResult.setTotalCount(totals);
                JSONArray docsArr = respObj.getJSONArray("docs");
                int size = docsArr.size();
                List<Program> programList = new ArrayList<>();
                for (int index = 0; index < size; index++) {
                    JSONObject docObj = docsArr.getJSONObject(index);
                    Program program = new Program();
                    program.setPname(docObj.getString("name"));
                    program.setId(docObj.getLongValue("id"));
                    programList.add(program);
                }
                solrResult.setProgramList(programList);
            }
        }
        return solrResult;
    }
}

 

如果需要进行关联多核进行查询时,可以采用如下形式:

http://localhost:8080/solr/core_1/select?shards=http://localhost:8080/solr/core_0,http://localhost:8080/solr/core_1&wt=json&q=%E4%BA%86&start=0&rows=10


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值