【原创】Java+solrJ实现对solr索引的增删改查

来源:互联网 发布:c语言经典小游戏编程 编辑:程序博客网 时间:2024/05/22 02:11

1、项目准备:
jdk1.8
eclipse
solr-solrJ-6.6.0.jar

2、项目具体内容

solrJ操作步骤:

  • 建立solrserver连接
  • 创建Document文档列表docs
  • 创建document文档对象doc
  • 获取需要建立索引的对象
  • 向doc加入索引的键值内容(其中键的类型需要在schema.xml/manage_schema下定义,先定义后使用)
  • 通过server连接添加文档列表
  • 最后别忘了commit,建立索引

**

3、实际项目代码

-----------solrJ的增删改查---------------package solrJTest;import java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.List;import java.util.UUID;import org.apache.solr.client.solrj.SolrClient;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.request.UpdateRequest;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import org.apache.solr.common.StringUtils;import org.junit.Test;import com.ctc.wstx.util.StringUtil;public class solrJTest {    SolrClient solrclient;    public solrJTest(String solrURL){        this.solrclient=new HttpSolrClient(solrURL);    }     public void close() {            try {                solrclient.close();            } catch (IOException e) {                e.printStackTrace();            }        }-----------增加文档:addDucument()---------------    @Test    public void addDucument() throws IOException{        System.out.println("======================add doc ===================");        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();        for (int i = 8; i < 9; i++) {            SolrInputDocument doc = new SolrInputDocument();            doc.addField("id", i*100);            doc.addField("name", "user"+i);            doc.addField("price", "100");            doc.addField("description", "新增文档"+i);            docs.add(doc);        }        try {            UpdateResponse rsp = solrclient.add(docs);            System.out.println("Add doc size" + docs.size() + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());            UpdateResponse rspcommit = solrclient.commit();            System.out.println("commit doc to index" + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());        } catch (SolrServerException  e) {            // TODO Auto-generated catch block            e.printStackTrace();        }}-----------查询文档:queryDocuments()-----------     @Test    public void queryDocuments(){        SolrQuery params = new SolrQuery();        System.out.println("======================query===================");        params.set("q", "*:*");        params.set("start", 0);        params.set("rows", 20);        params.set("sort", "id asc");        try {            QueryResponse rsp = solrclient.query(params);            SolrDocumentList docs = rsp.getResults();            System.out.println("查询内容:" + params);            System.out.println("文档数量:" + docs.getNumFound());            System.out.println("查询花费时间:" + rsp.getQTime());            System.out.println("------query data:------");            for (SolrDocument doc : docs) {                // 多值查询                @SuppressWarnings("unchecked")                int id = (int) doc.getFieldValue("id");                String name = (String) doc.getFieldValue("name");                String price = String.valueOf(doc.getFieldValue("price"));                String des = (String) doc.getFieldValue("description");                   System.out.println("id:"+id+"\t name:" + name + "\t description:"+des+"\t price:"+price );            }            System.out.println("-----------------------");        } catch (Exception e) {            e.printStackTrace();        }    }-----------删除文档BY ID:deleteById()-----------        @Test    public void deleteById(String id) {        System.out.println("======================deleteById ===================");        try {            UpdateResponse rsp = solrclient.deleteById(id);            solrclient.commit();            System.out.println("delete id:" + id + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());        } catch (SolrServerException | IOException e) {            e.printStackTrace();        }    }-----------删除文档BY QUERY:deleteByQuery()-----------          public void deleteByQuery(String query) {        System.out.println("======================deleteByQuery ===================");        UpdateResponse rsp;        try {            UpdateRequest commit = new UpdateRequest();            commit.deleteByQuery(query);            commit.setCommitWithin(500);            commit.process(solrclient);            System.out.println("url:"+commit.getPath()+"\t xml:"+commit.getXML()+" method:"+commit.getMethod());//            rsp = client.deleteByQuery(query);//            client.commit();//            System.out.println("delete query:" + queryCon + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());        } catch (SolrServerException | IOException e) {            e.printStackTrace();        }    }-----------更新文档:updateDocuments()----------- public void updateDocuments(int id,String fieldName, Object fieldValue) {        System.out.println("======================updateField ===================");        HashMap<String, Object> oper = new HashMap<String, Object>();//        多值更新方法//        List<String> mulitValues = new ArrayList<String>();//        mulitValues.add(fieldName);//        mulitValues.add((String)fieldValue);        oper.put("set", fieldValue);        SolrInputDocument doc = new SolrInputDocument();        doc.addField("id", id);        doc.addField(fieldName, oper);        try {            UpdateResponse rsp = solrclient.add(doc);            System.out.println("update doc id:" + id + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());            UpdateResponse rspCommit = solrclient.commit();            System.out.println("commit doc to index" + " result:" + rspCommit.getStatus() + " Qtime:" + rspCommit.getQTime());        } catch (SolrServerException | IOException e) {            e.printStackTrace();        }    }    public static void main(String args[]) throws IOException {        solrJTest test = new solrJTest("http://localhost:8080/solr/solr_core");        //添加文档         test.addDucument();        // 删除文档      //test.deleteById("200");        test.deleteByQuery("name:user3");        //更新文档        test.updateDocuments(400, "name", "user新");        // 查询文档       test.queryDocuments();        test.close();    }}

4、项目结果
这里写图片描述

原创粉丝点击