4、solr的增删改查和高亮以及分组

原创 2013年12月05日 21:40:53

代码如下:

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
		 */
	}

	
	
}

1、

2、

3、

4、

5、

6、

7、

8、

9、

10、


工程下载地址:http://download.csdn.net/detail/wxwzy738/6665131




solr 实现数据的删除和修改

修改主方法 public int saveContent(String enterpriseId, String enterpriseName, String lableType, String r...
  • qq_26562641
  • qq_26562641
  • 2016年10月28日 16:17
  • 4398

solr删除数据的4种方便快捷的方式

1、solr-用url,使用 stream 相关参数删除数据(我认为最方便的方法): 如: 根据id删除数据 http://localhost:8080/solr/update/?stream.bod...
  • lbf5210
  • lbf5210
  • 2016年04月21日 11:16
  • 13753

solr在java中更新单条数据内容

/**      * 更新solr的原数据      * @param solrId    solr的Id      * @param loveNum   需要更改的字段   -1则表示不做修...
  • qq_36617310
  • qq_36617310
  • 2017年03月06日 11:41
  • 665

搜索引擎-基于solrj客户端的solr增删改查

Solrj已经是很强大的solr客户端了。以完全对象的方式对solr进行交互。很小很好很强大。最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。 在此之前:先介绍一个异常,以前有朋友问过...
  • hu948162999
  • hu948162999
  • 2014年10月13日 21:19
  • 1627

java 调用solr服务器 实现增删改查 及高亮显示

首先有几点需要注意 客户端要调用solr服务,首先要把solr服务端工程启动,即前面文章讲的把solr下的slor.war例子放在tomcat下,进行相关配置,并启动。 (1)Exception ...
  • u013378306
  • u013378306
  • 2016年02月28日 21:44
  • 3766

【原创】Java+solrJ实现对solr索引的增删改查

1、项目准备: jdk1.8 eclipse solr-solrJ-6.6.0.jar2、项目具体内容solrJ操作步骤: 建立solrserver连接 创建Document文档列表docs ...
  • c_zyer
  • c_zyer
  • 2017年07月26日 16:57
  • 1821

solr的增删改查和高亮以及分组

代码如下: [java] view plain copy   package com.hj.solr;      import org.apache.solr.client.so...
  • semial
  • semial
  • 2016年01月27日 17:05
  • 705

solr的增删改查和高亮以及分组

  • 2013年12月05日 21:30
  • 8.61MB
  • 下载

1.3、索引库使用的增删改查,以及数据库的连接导入

1、索引库的维护  1、文档的添加  {"id":"A01","title_ik":"使用中文分析器的标题","content_ik":"使用中文分析器的内容"}     2、简...
  • u012954706
  • u012954706
  • 2017年11月19日 20:38
  • 52

solr的增删改查

solr的增删改查,啥都不说,直接代码 package com.johnny.lucene06.solr; import java.io.IOException; import ja...
  • codemosi
  • codemosi
  • 2015年02月16日 15:39
  • 713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4、solr的增删改查和高亮以及分组
举报原因:
原因补充:

(最多只允许输入30个字)