packagecom.sekk.kk.util.search.solr.test;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.lucene.index.Term;importorg.apache.lucene.search.BooleanClause;importorg.apache.lucene.search.BooleanQuery;importorg.apache.lucene.search.NumericRangeQuery;importorg.apache.lucene.search.WildcardQuery;importorg.apache.solr.client.solrj.SolrQuery;importorg.apache.solr.client.solrj.SolrQuery.ORDER;importorg.apache.solr.client.solrj.SolrServer;importorg.apache.solr.client.solrj.SolrServerException;importorg.apache.solr.client.solrj.impl.CloudSolrServer;importorg.apache.solr.client.solrj.impl.HttpSolrServer;importorg.apache.solr.client.solrj.response.QueryResponse;importorg.apache.solr.client.solrj.response.UpdateResponse;importorg.apache.solr.common.SolrDocument;importorg.apache.solr.common.SolrDocumentList;importorg.apache.solr.common.SolrInputDocument;importorg.apache.solr.common.params.MapSolrParams;importorg.apache.solr.common.params.SolrParams;importcom.sekk.kk.util.search.solr.SolrManager;importcom.linktong.util.format.DateFormat;importcom.linktong.util.validate.Validate;/**
*/
public classTestSolr {public static voidmain(String[] args) {//getSolrServer();
update();//query();//delete();//multiQuery();//conditionQuery();//deleteIndex4bbsUrl();//multiThreadDeleteIndex4bbsUrl();
}public static voidupdate() {try{
String url= "http://192.168.0.237:8983/solr/weibo";
SolrServer server= newHttpSolrServer(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= newSolrInputDocument();
doc1.addField("ID".toUpperCase(), "111");//doc1.addField("title".toUpperCase(), "云南xxx科技");
doc1.addField("CONTENT".toUpperCase(), "企业信息门户 云南 元数据 数字沙盘 知识管理");
doc1.addField("ANALYKEYWORDLIST".toUpperCase(), "企业信息门户 云南 元数据 数字沙盘 知识管理");//局部更新
SolrInputDocument doc2 = newSolrInputDocument();
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= newArrayList();//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 voidquery() {
String url= "http://192.168.0.237:8983/solr";
SolrServer server= newHttpSolrServer(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 = newMapSolrParams(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 voidconditionQuery() {//test lucene expression
BooleanQuery bQuery = newBooleanQuery();//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 = newHttpSolrServer(url);
StringBuilder q= newStringBuilder();//"股市 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= newSolrQuery();//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 voidmultiQuery() {try{//String url = "http://localhost:80/solr";//SolrServer server = new HttpSolrServer(url);
String zkHost= "192.168.0.237:2181/solr";
SolrServer server= newCloudSolrServer(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= newMapSolrParams(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 voiddelete() {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 = newHttpSolrServer(url);
Map map = new HashMap();
map.put("q", "*:*");
map.put("collection", "weibo");
SolrParams solrParams= newMapSolrParams(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 voidmultiThreadDeleteIndex4bbsUrl() {final String url1 = solrUrl35 + "/bbs";final String url2 = solrUrl34 + "/bbs";final String url3 = solrUrl89 + "/bbs";
String keyword= "*:*";//String keyword = "我要检测 OR 我要 OR 我要检测管理 OR 您点击 OR 要检测";
newDeleteSolrIndexTool4BBSUrl(url1, keyword).start();//new DeleteSolrIndexTool4BBSUrl(url2, keyword).start();//new DeleteSolrIndexTool4BBSUrl(url3, keyword).start();
}public static voiddeleteIndex4bbsUrl() {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 = newHttpSolrServer(url);boolean isDelete = true;while(isDelete) {try{//Map map = new HashMap();//map.put("q", "*:*");//map.put("collection", "weibo");
SolrQuery query= newSolrQuery();
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 voidgetSolrServer() {
SolrManager solrManager= newSolrManager();//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 extendsThread {privateString url;privateString logName;privateString keyword;publicDeleteSolrIndexTool4BBSUrl(String url, String keyword) {super();this.url =url;this.keyword =keyword;
}public voidrun() {this.logName =Thread.currentThread().getName();int dataCount = 0, deleteCount = 0, deleteSuccCount = 0;int start = 0;int rows = 100;//不指定core,solr会采用默认配置collection1
HttpSolrServer server= newHttpSolrServer(url);boolean isDelete = true;while(isDelete) {try{
SolrQuery query= newSolrQuery();
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();
}
}
}