【原创】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、项目结果
阅读全文
2 0
- 【原创】Java+solrJ实现对solr索引的增删改查
- 4.solrj对索引的增删改查
- 利用Solrj对索引进行增删改查
- 搜索引擎-基于solrj客户端的solr增删改查
- Solr索引增删改查
- [solr] - SolrJ增删查
- [solr] - SolrJ增删查
- solrj 增删改查
- 搜索引擎-基于solrj客户端的solr增删改查 (附:大神博客链接)
- Solr的index索引的增删改查
- Solr索引之增删改查
- solr的增删改查
- java实现对mysql的增删改查
- Java实现对mysql数据库的增删查改
- Java实现对cookie的增删改查
- Java实现对cookie的操作(增删改查)
- Java实现对cookie的增删改查
- 用java实现对数据库的增删改查
- 并发容器ConcurrentLinkedQueue的offer() 和add() 的区别
- 01 HBASE 概述
- 区别:新旧C/C++之间的头文件
- nodeJs express允许跨域代码
- dubbox rest学习
- 【原创】Java+solrJ实现对solr索引的增删改查
- 物联网资源
- git
- python md5和AES/ECB/pkcs7加密
- Struts2(一)-Struts2之HelloWorld
- springmvc为什么不能拦截jsp页面?
- linux系统下装Oracle 11G详解,超详解
- android:hint属性对TextView(或者EditText)的影响--源码分析
- Dinner