代码如下:
package com.hj.solr; import org.apache.solr.client.solrj.beans.Field; /** * 在变量的set方法上注解上lucene内部的字段名称 */ public class Message { private String id; private String title; private String content[]; public Message() { super(); } public Message(String id, String title, String[] content) { super(); this.id = id; this.title = title; this.content = content; } public String getId() { return id; } @Field public void setId(String id) { this.id = id; } public String getTitle() { return title; } @Field("msg_title") public void setTitle(String title) { this.title = title; } public String[] getContent() { return content; } @Field("msg_content") public void setContent(String[] content) { this.content = content; } }
package com.hj.solr; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.client.solrj.response.FacetField.Count; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; /** * @date 2013年12月4日 * @author huangjie */ @SuppressWarnings("deprecation") public class SolrTest { //指定solr服务器的地址 private final static String URL = "http://localhost:8080/solr"; @Test public void test1(){ //1、创建SolrServer对象,该对象有两个可以使用,都是线程安全的 // CommonsHttpSolrServer:启动web服务器使用的,通过http请求的 // EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了 try { CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); //把查询出来的数据全部删除 // server.deleteByQuery("*:*"); // server.commit(); SolrInputDocument doc = new SolrInputDocument(); //id是必填的,并且是String类型的 //<field name="id" type="string" indexed="true" stored="true" required="true" /> //id是唯一的主键,当多次添加的时候,最后添加的相同id会覆盖前面的域 doc.addField("id", "1"); doc.addField("msg_title", "这是我的第一个solrj程序"); doc.addField("msg_content", "solr程序的运行"); server.add(doc); server.commit(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 基于列表的添加 * @throws SolrServerException * @throws IOException */ @Test public void test2() throws SolrServerException, IOException{ List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "2"); doc.addField("msg_title", "很好,solr可以工作了"); doc.addField("msg_content", "solr总算可以正式工作了"); docs.add(doc); doc = new SolrInputDocument(); doc.addField("id", "3"); doc.addField("msg_title", "测试以下solr的添加"); doc.addField("msg_content", "看看能不能添加一个列表信息"); docs.add(doc); CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); server.add(docs); server.commit(); } /** * 基于javabean的添加 * @throws SolrServerException * @throws IOException */ @Test public void test3() throws SolrServerException, IOException{ List<Message> msgs = new ArrayList<Message>(); //多值域的添加使用数组 msgs.add(new Message("4","基于javabean的添加", new String[]{"javabean的添加附件","javabean的添加附件1"})); msgs.add(new Message("5","基于javabean的列表数据的添加", new String[]{"通过对象完成添加的附件","通过对象完成添加的附件1"})); CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); server.addBeans(msgs); server.commit(); } @Test public void test4() throws SolrServerException, MalformedURLException{ CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); //定义查询字符串 SolrQuery query = new SolrQuery("*:*"); //实现分页的查询 query.setStart(0); query.setRows(3); QueryResponse res = server.query(query); //查询出来的结果都保存在SolrDocumentList中 SolrDocumentList sdl = res.getResults(); System.out.println("总数:"+sdl.getNumFound()); for(SolrDocument sd : sdl){ System.out.println(sd.get("id")+"#"+sd.get("msg_title")+"#"+sd.get("msg_content")); } } @Test public void test5() throws MalformedURLException, SolrServerException{ CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); //相当于QueryParser SolrQuery query = new SolrQuery("*:*"); query.setStart(1); query.setRows(3); QueryResponse res = server.query(query); //可以直接查询相应的bean对象,但是不是很常用 //使用这种方式无法获取总数量 List<Message> list = res.getBeans(Message.class); System.out.println("当前总数:"+list.size()); for(Message msg : list){ System.out.println(msg.getId()+"#"+msg.getTitle()+"#"+msg.getContent()); } } @Test public void test6() throws SolrServerException, MalformedURLException{ CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); SolrQuery query = new SolrQuery("msg_content:solr"); query.setHighlight(true).setHighlightSimplePre("<span class='red'>").setHighlightSimplePost("</span>") .setStart(0).setRows(10); //hl.fl表示高亮的field,也就是高亮的区域 query.setParam("hl.fl", "msg_title,msg_content"); QueryResponse res = server.query(query); SolrDocumentList sdl = res.getResults(); System.out.println("总数:"+sdl.getNumFound()); for(SolrDocument sd : sdl){ // System.out.println(sd.get("id")+"#"+sd.get("msg_title")+"#"+sd.get("msg_content")); String id = (String) sd.get("id"); //在solr这里对需要加高亮的字段必须要在索引中的store=true才行 System.out.println(id+"#"+res.getHighlighting().get(id).get("msg_content"));; } } /** * 测试分组 * @throws MalformedURLException * @throws SolrServerException */ @Test public void test7() throws MalformedURLException, SolrServerException{ CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); SolrQuery query = new SolrQuery("city:*"); query.setIncludeScore(false); query.setFacet(true); query.addFacetField("city"); query.setFacetSort(true); QueryResponse res = server.query(query); List<Count> countList = res.getFacetField("city").getValues(); for(Count count : countList){ System.out.println(count.getName()+"#"+count.getCount()); } /** * 输出结果: * 上海#5290 深圳#2763 广州#2504 北京#1962 东莞#1764 杭州#1713 苏州#1661 南京#1529 */ } }
2、
工程下载地址:http://download.csdn.net/detail/wxwzy738/6665131