solr 增加删除修改更新

package com.zhen.course.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;

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.junit.Test;

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

	@Test
	public void addDucument() throws IOException {
		Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
		for (int i = 1; i < 100; i++) {
			SolrInputDocument doc = new SolrInputDocument();
			doc.addField("id", i * 100);
			doc.addField("name", "搜狐网" + i);
			doc.addField("price", 100 * i);
			doc.addField("text", "搜狗社区" + i);
			docs.add(doc);
		}
		try {
			solrclient.add("sohu", docs);
			solrclient.commit("sohu");
		} catch (SolrServerException e) {
			e.printStackTrace();
		}
	}

	@Test
	public void queryDocuments() {
		SolrQuery params = new SolrQuery();
		params.set("q", "*:*");
		params.set("start", 0);
		params.set("rows", 8);
		params.set("sort", "id asc");
		try {
			QueryResponse rsp = solrclient.query(params);
			SolrDocumentList docs = rsp.getResults();
			System.out.println("params:" + params);
			System.out.println("num:" + docs.getNumFound());
			System.out.println("time:" + rsp.getQTime());
			for (SolrDocument doc : docs) {
				int id = (int) doc.getFieldValue("id");
				String name = (String) doc.getFieldValue("name");
				String price = String.valueOf(doc.getFieldValue("price"));
				String text = (String) doc.getFieldValue("text");
				System.out.println("id:" + id + " name:" + name + " price:" + price + " text:" + text);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Test
	public void deleteById(String id) {
		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();
		}
	}

	public void deleteByQuery(String query) {

		try {
			UpdateRequest commit = new UpdateRequest();
			commit.deleteByQuery(query);
			commit.setCommitWithin(1000);// 在毫秒内提交
			commit.process(solrclient);
		} catch (SolrServerException | IOException e) {
			e.printStackTrace();
		}

	}

	public void deleteByQuery2(String query) {

		try {

			solrclient.deleteByQuery("sohu", query);
			solrclient.commit("sohu");
		} catch (SolrServerException | IOException e) {
			e.printStackTrace();
		}

	}

	public void updateDocuments(int id, String fieldName, Object fieldValue) {
		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 {
			solrclient.add("sohu", doc);
			solrclient.commit("sohu");

		} catch (SolrServerException | IOException e) {
			e.printStackTrace();
		}

	}

	public static void main(String args[]) throws IOException {

		SolrJTest test = new SolrJTest("http://localhost:8080/solr");

		// add
		test.addDucument();

		// delete
		// test.deleteById("200");
		test.deleteByQuery("name:user3");
		// update
		test.updateDocuments(1, "name", "搜狐视频");

		// query
		test.queryDocuments();

		test.close();
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值