【原創】Java+solrJ實現對solr索引的增刪改查

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、項目結果
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章