博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr局部或指定字段更新之set用法
阅读量:4559 次
发布时间:2019-06-08

本文共 22320 字,大约阅读时间需要 74 分钟。

solr wiki文档也有 
 
 
 
 
 
 
 
java code
 
public static void update() {
          try {
               String url = "http://192.168.0.237:8983/solr/weibo";
               SolrServer server = new HttpSolrServer(url);
               // String zkHost = "192.168.0.237:2181/solr";
               // CloudSolrServer server = new CloudSolrServer(zkHost);
               // server.setDefaultCollection("weibo");
               // SolrInputDocument doc1 = new SolrInputDocument();
               // doc1.addField("id", "1");
               // doc1.addField("title", "云南xxx科技");
               // doc1.addField("cat", "企业信息门户,元数据,数字沙盘,知识管理");
               //
               // SolrInputDocument doc2 = new SolrInputDocument();
               // doc2.addField("id", "2");
               // doc2.addField("title", "胡启稳");
               // doc2.addField("cat", "知识管理,企业信息门户,云南,昆明");
               //
               // SolrInputDocument doc3 = new SolrInputDocument();
               // doc3.addField("id", "3");
               // doc3.addField("title", "liferay");
               // doc3.addField("test_s", "这个内容能添加进去么?这是动态字段呀");
               SolrInputDocument doc1 = new SolrInputDocument();
               doc1.addField("ID".toUpperCase(), "50dc4fa4c9dce9e193e87170");
              
              
              
               Map<String, String > operation = new HashMap<String ,String >();
               operation.put("set", "--------------------------");
              
//               doc1.addField("title".toUpperCase(), "云南xxx科技");
               doc1.addField("CONTENT".toUpperCase(), operation);
//               doc1.addField("ANALYKEYWORDLIST".toUpperCase(), "企业信息门户  云南  元数据  数字沙盘  知识管理");
               // SolrInputDocument doc2 = new SolrInputDocument();
               // doc2.addField("id".toUpperCase(), "2");
               // doc2.addField("title".toUpperCase(), "胡启稳");
               // doc2.addField("content".toUpperCase(), "知识管理  企业信息门户 云南  昆明");
               //
               // SolrInputDocument doc3 = new SolrInputDocument();
               // doc3.addField("id".toUpperCase(), "3");
               // doc3.addField("title".toUpperCase(), "liferay");
               // doc3.addField("content".toUpperCase(),
               // "这个内容能添加进去么  云南  这是动态字段呀");
               List docs = new ArrayList();
               docs.add(doc1);
               // docs.add(doc2);
               // docs.add(doc3);
//
//               UpdateRequest req = new UpdateRequest();
//              
//               UpdateRequest reqSuc = req.add(doc1);
//              
//               req.process(server);
//              
//              
//               System.out.println(reqSuc);
//               UpdateResponse updateResponse = server.
               server.add(docs);
               server.commit();
          } catch (SolrServerException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
     }
 
 附加代码:
TestSolr.java
package com.sekk.kk.util.search.solr.test;import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.lucene.index.Term;import org.apache.lucene.search.BooleanClause;import org.apache.lucene.search.BooleanQuery;import org.apache.lucene.search.NumericRangeQuery;import org.apache.lucene.search.WildcardQuery;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.CloudSolrServer;import org.apache.solr.client.solrj.impl.HttpSolrServer;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.params.MapSolrParams;import org.apache.solr.common.params.SolrParams;import com.sekk.kk.util.search.solr.SolrManager;import com.linktong.util.format.DateFormat;import com.linktong.util.validate.Validate;/** */public class TestSolr {    public static void main(String[] args) {        // getSolrServer();         update();        // query();        // delete();        // multiQuery();        // conditionQuery();        // deleteIndex4bbsUrl();//        multiThreadDeleteIndex4bbsUrl();    }    public static void update() {        try {            String url = "http://192.168.0.237:8983/solr/weibo";            SolrServer server = new HttpSolrServer(url);            // String zkHost = "192.168.0.237:2181/solr";            // CloudSolrServer server = new CloudSolrServer(zkHost);            // server.setDefaultCollection("weibo");            // SolrInputDocument doc1 = new SolrInputDocument();            // doc1.addField("id", "1");            // doc1.addField("title", "云南xxx科技");            // doc1.addField("cat", "企业信息门户,元数据,数字沙盘,知识管理");            //            // SolrInputDocument doc2 = new SolrInputDocument();            // doc2.addField("id", "2");            // doc2.addField("title", "胡启稳");            // doc2.addField("cat", "知识管理,企业信息门户,云南,昆明");            //            // SolrInputDocument doc3 = new SolrInputDocument();            // doc3.addField("id", "3");            // doc3.addField("title", "liferay");            // doc3.addField("test_s", "这个内容能添加进去么?这是动态字段呀");                        SolrInputDocument doc1 = new SolrInputDocument();            doc1.addField("ID".toUpperCase(), "111");            // doc1.addField("title".toUpperCase(), "云南xxx科技");            doc1.addField("CONTENT".toUpperCase(), "企业信息门户  云南  元数据  数字沙盘  知识管理");            doc1.addField("ANALYKEYWORDLIST".toUpperCase(), "企业信息门户  云南  元数据  数字沙盘  知识管理");            // 局部更新            SolrInputDocument doc2 = new SolrInputDocument();            doc2.addField("ID".toUpperCase(), "50fdd2d7c9dc111541755740");            // doc1.addField("title".toUpperCase(), "云南xxx科技");                        Map
operationMap = new HashMap
(); operationMap.put("set", "adasdasdsad"); doc2.addField("CONTENT".toUpperCase(), operationMap); // doc2.addField("ANALYKEYWORDLIST".toUpperCase(), "企业信息门户 云南 元数据 数字沙盘 知识管理"); // SolrInputDocument doc2 = new SolrInputDocument(); // doc2.addField("id".toUpperCase(), "2"); // doc2.addField("title".toUpperCase(), "胡启稳"); // doc2.addField("content".toUpperCase(), "知识管理 企业信息门户 云南 昆明"); // // SolrInputDocument doc3 = new SolrInputDocument(); // doc3.addField("id".toUpperCase(), "3"); // doc3.addField("title".toUpperCase(), "liferay"); // doc3.addField("content".toUpperCase(), // "这个内容能添加进去么 云南 这是动态字段呀"); List docs = new ArrayList(); // docs.add(doc1); docs.add(doc2); // docs.add(doc3); UpdateResponse updateResponse = server.add(docs); System.out.println("updateResponse=" + updateResponse); server.commit(); server.shutdown(); } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void query() { String url = "http://192.168.0.237:8983/solr"; SolrServer server = new HttpSolrServer(url); SolrQuery query = new SolrQuery("云南"); Map
map = new HashMap
(); // map.put(FacetParams.FACET_DATE, "manufacturedate_dt"); // map.put(FacetParams.FACET_DATE_START, "2004-01-01T00:00:00Z"); // map.put(FacetParams.FACET_DATE_END, "2010-01-01T00:00:00Z"); // map.put(FacetParams.FACET_DATE_GAP, "+1YEAR"); // map.put("indent", "on"); map.put("wt", "xml"); // map.put("hl.fl", "name"); SolrParams params = new MapSolrParams(map); query.add(params); query.setHighlight(true); try { QueryResponse response = server.query(query); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + response); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); System.out.println(docs); for (SolrDocument doc : docs) { System.out.println(doc); System.out.println("id: " + doc.getFieldValue("id")); System.out.println("title: " + doc.getFieldValue("title")); System.out.println("cat: " + doc.getFieldValue("cat")); System.out.println("test_s: " + doc.getFieldValue("test_s")); System.out.println(); } } catch (Exception e) { // TODO: handle exception } } public static void conditionQuery() { // test lucene expression BooleanQuery bQuery = new BooleanQuery(); // test range expression // // +LPUBLISHTIME1:{1 TO 3} // NumericRangeQuery numRangeQuery1 = // NumericRangeQuery.newIntRange("lpublishtime1".toUpperCase(), 1, 3, // false, false); // bQuery.add(numRangeQuery1, BooleanClause.Occur.MUST); // System.out.println(bQuery); // // // +LPUBLISHTIME2:[1 TO 3} // NumericRangeQuery numRangeQuery2 = // NumericRangeQuery.newIntRange("lpublishtime2".toUpperCase(), 1, 3, // true, false); // bQuery.add(numRangeQuery2, BooleanClause.Occur.MUST); // System.out.println(bQuery); // // // +LPUBLISHTIME2:[1 TO 3] // NumericRangeQuery numRangeQuery3 = // NumericRangeQuery.newIntRange("lpublishtime2".toUpperCase(), 1, 3, // true, true); // bQuery.add(numRangeQuery3, BooleanClause.Occur.MUST); // System.out.println(bQuery); String url = "http://61.152.33.19:8983/solr/weibo"; // String url = "http://192.168.0.237:8983/solr/weibo"; // String url = "http://192.168.0.237:8983/solr/weibo"; // SolrServer server = new HttpSolrServer(url); HttpSolrServer server = new HttpSolrServer(url); StringBuilder q = new StringBuilder(); // "股市 OR( 股票 AND 股市) OR 股市" // q.append(" +"); // q.append("股市 OR( 股票 AND 股市) OR 股市"); // q.append("ANALYKEYWORDLIST:云南"); q.append("*:*"); // q.append(" +"); // q.append("URL:-http*"); // q.append(" +"); // q.append("ACCOUNT:dsfewfwefpink"); // q.append(" +"); // q.append("LPUBLISHTIME:[1356577413000 TO 1356577413001}"); // q.append("LPUBLISHTIME:[1356577413000 TO 1356577413000]"); SolrQuery query = new SolrQuery(); // Map
map = new HashMap
(); // map.put("wt", "xml"); // query.set("wt", "xml"); // query.add("fq", "-URL:http://*"); // "云南" // map.put("hl.fl", "name"); // SolrParams params = new MapSolrParams(map); // query.add(params); // query.setHighlight(true); int start = 0; int rows = 10; query.setStart(start); query.setRows(rows); query.setQuery(q.toString()); // Date parseDate = null; // try { // parseDate = DateFormat.parseDate("2013-01-15 00:00:00"); // } catch (Exception e1) { // // TODO Auto-generated catch block // e1.printStackTrace(); // } // query.set("fq", "lpublishtime".toUpperCase() + ":[" + // parseDate.getTime() + " TO *]"); // query.addSortField("lpublishtime".toUpperCase(), ORDER.desc); try { // query.setHighlight(true) // // 设置开头 // .addHighlightField("CONTENT") // 高亮字段 // .setHighlightSimplePre("
").setHighlightSimplePost("") // // 设置结尾 // .setStart(0).setRows(10);// 设置行数 // // // 设置高亮的哪些区域 // query.setParam("hl.fl", "CONTENT"); QueryResponse response = server.query(query); SolrDocumentList docs = response.getResults(); // SolrDocumentList list = response.getResults(); // // System.out.println("高亮显示:"); // for (SolrDocument sd : list) { // String id = (String) sd.getFieldValue("ID"); // if (response.getHighlighting().get(id) != null) { // System.out.println(response.getHighlighting().get(id).get("CONTENT")); // // } // } System.out.println("文档个数:" + response); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); System.out.println(docs); for (SolrDocument doc : docs) { System.out.println(doc); System.out.println("id: " + doc.getFieldValue("ID")); System.out.println("title: " + doc.getFieldValue("title")); System.out.println("CONTENT: " + doc.getFieldValue("CONTENT")); System.out.println("test_s: " + doc.getFieldValue("test_s")); System.out.println(); } } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } server.shutdown(); } public static void multiQuery() { try { // String url = "http://localhost:80/solr"; // SolrServer server = new HttpSolrServer(url); String zkHost = "192.168.0.237:2181/solr"; SolrServer server = new CloudSolrServer(zkHost); // String url = "http://localhost:80/solr"; SolrQuery query = new SolrQuery("云南"); // SolrQuery query = new SolrQuery(); // Map
map = new HashMap
(); // // map.put(FacetParams.FACET_DATE, "manufacturedate_dt"); // // map.put(FacetParams.FACET_DATE_START, "2004-01-01T00:00:00Z"); // // map.put(FacetParams.FACET_DATE_END, "2010-01-01T00:00:00Z"); // // map.put(FacetParams.FACET_DATE_GAP, "+1YEAR"); // // map.put("indent", "on"); // map.put("wt", "xml"); // // map.put("hl.fl", "name"); // SolrParams params = new MapSolrParams(map); // query.add(params); // query.setHighlight(true); String shards = "localhost:80/solr,localhost:80/solr/weibo"; Map
map = new HashMap
(); map.put("q", "*:*"); map.put("collection", "weibo"); // map.put("shards", shards); // SolrParams params = new MapSolrParams(map); // query.add(params); SolrParams solrParams = new MapSolrParams(map); // ModifiableSolrParams solrParams = new ModifiableSolrParams(); // solrParams.set("q", "*:*"); // solrParams.set("shards", shards); // String shards = "localhost:8983/solr,localhost:7574/solr"; // StringBuffer request = new StringBuffer(); // request.append("&q=" + query); // request.append("&shards=" + shards); // SolrParams solrParams = // SolrRequestParsers.parseQueryString(request.toString()); QueryResponse response = server.query(solrParams); // QueryResponse response = server.query(query); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + response); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); System.out.println(docs); for (SolrDocument doc : docs) { System.out.println(doc); System.out.println("id: " + doc.getFieldValue("id")); System.out.println("title: " + doc.getFieldValue("title")); System.out.println("content: " + doc.getFieldValue("content")); System.out.println("test_s: " + doc.getFieldValue("test_s")); System.out.println(); } // release the resource server.shutdown(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } public static void delete() { try { // 不指定core,solr会采用默认配置collection1 String url = "http://61.152.33.19:8983/solr/bbs"; // String url = "http://192.168.0.237:8983/solr/weibo"; // // String url = "http://localhost:80/solr/weibo"; // SolrServer server = new HttpSolrServer(url); // String zkHost = "192.168.0.237:2181/solr"; // CloudSolrServer server = new CloudSolrServer(zkHost); // server.setDefaultCollection("weibo"); HttpSolrServer server = new HttpSolrServer(url); Map
map = new HashMap
(); map.put("q", "*:*"); map.put("collection", "weibo"); SolrParams solrParams = new MapSolrParams(map); // UpdateResponse updateResponse = server.deleteByQuery(solrParams); // UpdateResponse updateResponse = server.deleteByQuery("*:*"); // UpdateResponse updateResponse = server.deleteByQuery("*:*"); // System.out.println(updateResponse); // 不提交不会生效 // updateResponse = server.commit(); // System.out.println(updateResponse); server.shutdown(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } static final String solrUrl89 = "http://61.152.33.19:8983/solr"; static final String solrUrl35 = "http://61.159.33.33:8983/solr"; static final String solrUrl34 = "http://61.122.116.44:8983/solr"; public static void multiThreadDeleteIndex4bbsUrl() { final String url1 = solrUrl35 + "/bbs"; final String url2 = solrUrl34 + "/bbs"; final String url3 = solrUrl89 + "/bbs"; String keyword = "*:*";// String keyword = "我要检测 OR 我要 OR 我要检测管理 OR 您点击 OR 要检测"; new DeleteSolrIndexTool4BBSUrl(url1, keyword).start();// new DeleteSolrIndexTool4BBSUrl(url2, keyword).start();// new DeleteSolrIndexTool4BBSUrl(url3, keyword).start(); } public static void deleteIndex4bbsUrl() { int dataCount = 0, deleteCount = 0, deleteSuccCount = 0; int start = 0; int rows = 100; // 不指定core,solr会采用默认配置collection1 String url = "http://61.152.33.19:8983/solr/bbs"; // String url = "http://192.168.0.237:8983/solr/weibo"; // // String url = "http://localhost:80/solr/weibo"; // SolrServer server = new HttpSolrServer(url); // String zkHost = "192.168.0.237:2181/solr"; // CloudSolrServer server = new CloudSolrServer(zkHost); // server.setDefaultCollection("weibo"); HttpSolrServer server = new HttpSolrServer(url); boolean isDelete = true; while (isDelete) { try { // Map
map = new HashMap
(); // map.put("q", "*:*"); // map.put("collection", "weibo"); SolrQuery query = new SolrQuery(); query.setStart(start); query.setRows(rows); query.add("fl", "ID,LPUBLISHTIME,SITE,URL"); // query.setQuery("*:*"); query.setQuery("我要检测 OR 我要 OR 我要检测管理 OR 您点击 OR 要检测"); System.out.println("开始查询..." + query); QueryResponse response = server.query(query); SolrDocumentList docs = response.getResults(); if (Validate.isEmpty(docs)) { System.out.println("查询为空! " + query); break; } System.out.println("文档个数:" + docs.getNumFound() + ",查询时间:" + response.getQTime());// System.out.println(docs); for (SolrDocument doc : docs) { dataCount++; // System.out.println(doc); System.out.println("id: " + doc.getFieldValue("id".toUpperCase())); String id = (String) doc.getFieldValue("id".toUpperCase()); String dataUrl = (String) doc.getFieldValue("url".toUpperCase()); if (dataUrl.indexOf("http://") == -1) { deleteCount++; System.out.println("delete " + id + " start..."); try { UpdateResponse updateResponse = server.deleteByQuery("ID:" + id); // 不提交不会生效 updateResponse = server.commit(); deleteSuccCount++; System.out.println("delete " + updateResponse); } catch (Exception e) { System.out.println("delete " + id + " error"); e.printStackTrace(); } System.out.println("delete " + id + " end"); } // System.out.println("title: " + // doc.getFieldValue("title")); // System.out.println("content: " + // doc.getFieldValue("content")); // System.out.println("test_s: " + // doc.getFieldValue("test_s")); // System.out.println(); } // SolrParams solrParams = new MapSolrParams(map); // UpdateResponse updateResponse = // server.deleteByQuery(solrParams); // UpdateResponse updateResponse = server.deleteByQuery("*:*"); // UpdateResponse updateResponse = server.deleteByQuery("*:*"); // System.out.println(updateResponse); // // 不提交不会生效 // updateResponse = server.commit(); // System.out.println(updateResponse); } catch (Exception e) { System.out.println("deleteIndex4bbsUrl handle error:" + e.getMessage()); // TODO: handle exception e.printStackTrace(); } start += rows; System.out.println("start=" + start + ",rows=" + rows + ",dataCount=" + dataCount + ",deleteCount=" + deleteCount + ",deleteSuccCount=" + deleteSuccCount); } System.out.println("运行完毕~!"); System.out.println("start=" + start + ",rows=" + rows + ",dataCount=" + dataCount + ",deleteCount=" + deleteCount + ",deleteSuccCount=" + deleteSuccCount); try { server.shutdown(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void getSolrServer() { SolrManager solrManager = new SolrManager(); // String coreName = "collection1"; String coreName = "weibo"; try { SolrServer solrServer = solrManager.getSolrServer(coreName); System.out.println(solrServer); // Use solrServer operation } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}class DeleteSolrIndexTool4BBSUrl extends Thread { private String url; private String logName; private String keyword; public DeleteSolrIndexTool4BBSUrl(String url, String keyword) { super(); this.url = url; this.keyword = keyword; } public void run() { this.logName = Thread.currentThread().getName(); int dataCount = 0, deleteCount = 0, deleteSuccCount = 0; int start = 0; int rows = 100; // 不指定core,solr会采用默认配置collection1 HttpSolrServer server = new HttpSolrServer(url); boolean isDelete = true; while (isDelete) { try { SolrQuery query = new SolrQuery(); query.setStart(start); query.setRows(rows); query.add("fl", "ID,LPUBLISHTIME,SITE,URL"); // query.setQuery("*:*"); // query.setQuery("我要检测 OR 我要 OR 我要检测管理 OR 您点击 OR 要检测"); query.setQuery(keyword); System.out.println(logName + " " + "开始查询..." + query); QueryResponse response = server.query(query); SolrDocumentList docs = response.getResults(); if (Validate.isEmpty(docs)) { System.out.println(logName + " " + "查询为空! " + query); break; } System.out.println(logName + " " + "文档个数:" + docs.getNumFound() + ",查询时间:" + response.getQTime()); // System.out.println(docs); for (SolrDocument doc : docs) { dataCount++; // System.out.println(doc); System.out.println(logName + " " + "id: " + doc.getFieldValue("id".toUpperCase())); String id = (String) doc.getFieldValue("id".toUpperCase()); String dataUrl = (String) doc.getFieldValue("url".toUpperCase()); if (dataUrl.indexOf("http://") == -1) { deleteCount++; System.out.println(logName + " " + "delete " + id + " start..."); try { UpdateResponse updateResponse = server.deleteByQuery("ID:" + id); // 不提交不会生效 updateResponse = server.commit(); deleteSuccCount++; System.out.println(logName + " " + "delete " + updateResponse); } catch (Exception e) { System.out.println(logName + " " + "delete " + id + " error"); e.printStackTrace(); } System.out.println(logName + " " + "delete " + id + " end"); } } } catch (Exception e) { System.out.println(logName + " " + "deleteIndex4bbsUrl handle error:" + e.getMessage()); // TODO: handle exception e.printStackTrace(); } start += rows; System.out.println(logName + " " + "start=" + start + ",rows=" + rows + ",dataCount=" + dataCount + ",deleteCount=" + deleteCount + ",deleteSuccCount=" + deleteSuccCount); } System.out.println(logName + " " + "运行完毕~!"); System.out.println(logName + " " + "start=" + start + ",rows=" + rows + ",dataCount=" + dataCount + ",deleteCount=" + deleteCount + ",deleteSuccCount=" + deleteSuccCount); try { server.shutdown(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
View Code

 

 

转载于:https://www.cnblogs.com/svennee/p/4083052.html

你可能感兴趣的文章
Harris角点检测
查看>>
Struts2的处理流程及为Action的属性注入值
查看>>
设计中最常用的CSS选择器
查看>>
Maven项目打包成可执行Jar文件
查看>>
nginx http proxy 正向代理
查看>>
对BFC的总结
查看>>
第十四周Java学习总结
查看>>
税率等级
查看>>
__alloc_pages
查看>>
web service 使用多态(转载)
查看>>
23醒
查看>>
NYOJ-586 疯牛(二分枚举+贪心)
查看>>
如何管理密码-网络站长-网络管理员必看
查看>>
可编程渲染管线与着色器语言
查看>>
linux命令总结之seq命令
查看>>
查看cpu几核方法
查看>>
现在下载解压都找不到spring.jar 原因
查看>>
[BJWC2010]外星联络
查看>>
DICOM MPPS的原理及应用
查看>>
IOS画线条
查看>>