`
wbj0110
  • 浏览: 1604833 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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

    博客分类:
  • Solr
阅读更多

代码如下:

 

  1. package com.hj.solr;  
  2.   
  3. import org.apache.solr.client.solrj.beans.Field;  
  4.   
  5. /** 
  6.  * 在变量的set方法上注解上lucene内部的字段名称 
  7.  */  
  8. public class Message {  
  9.     private String id;  
  10.     private String title;  
  11.     private String content[];  
  12.       
  13.       
  14.     public Message() {  
  15.         super();  
  16.     }  
  17.   
  18.     public Message(String id, String title, String[] content) {  
  19.         super();  
  20.         this.id = id;  
  21.         this.title = title;  
  22.         this.content = content;  
  23.     }  
  24.   
  25.     public String getId() {  
  26.         return id;  
  27.     }  
  28.       
  29.     @Field  
  30.     public void setId(String id) {  
  31.         this.id = id;  
  32.     }  
  33.     public String getTitle() {  
  34.         return title;  
  35.     }  
  36.       
  37.     @Field("msg_title")  
  38.     public void setTitle(String title) {  
  39.         this.title = title;  
  40.     }  
  41.     public String[] getContent() {  
  42.         return content;  
  43.     }  
  44.       
  45.     @Field("msg_content")  
  46.     public void setContent(String[] content) {  
  47.         this.content = content;  
  48.     }  
  49. }  
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;
	}
}

 

  1. package com.hj.solr;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.MalformedURLException;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7.   
  8. import org.apache.solr.client.solrj.SolrQuery;  
  9. import org.apache.solr.client.solrj.SolrServerException;  
  10. import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;  
  11. import org.apache.solr.client.solrj.response.FacetField.Count;  
  12. import org.apache.solr.client.solrj.response.QueryResponse;  
  13. import org.apache.solr.common.SolrDocument;  
  14. import org.apache.solr.common.SolrDocumentList;  
  15. import org.apache.solr.common.SolrInputDocument;  
  16. import org.junit.Test;  
  17.   
  18. /** 
  19.  * @date 2013年12月4日 
  20.  * @author huangjie 
  21.  */  
  22. @SuppressWarnings("deprecation")  
  23. public class SolrTest {  
  24.     //指定solr服务器的地址  
  25.     private final static String URL = "http://localhost:8080/solr";  
  26.       
  27.     @Test  
  28.     public void test1(){  
  29.         //1、创建SolrServer对象,该对象有两个可以使用,都是线程安全的  
  30. //      CommonsHttpSolrServer:启动web服务器使用的,通过http请求的  
  31. //      EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了  
  32.         try {  
  33.             CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  34.             //把查询出来的数据全部删除  
  35. //          server.deleteByQuery("*:*");  
  36. //          server.commit();  
  37.               
  38.             SolrInputDocument doc = new SolrInputDocument();  
  39.             //id是必填的,并且是String类型的  
  40.             //<field name="id" type="string" indexed="true" stored="true" required="true" />  
  41.             //id是唯一的主键,当多次添加的时候,最后添加的相同id会覆盖前面的域  
  42.             doc.addField("id""1");  
  43.             doc.addField("msg_title""这是我的第一个solrj程序");  
  44.             doc.addField("msg_content""solr程序的运行");  
  45.             server.add(doc);  
  46.             server.commit();  
  47.         } catch (MalformedURLException e) {  
  48.             e.printStackTrace();  
  49.         } catch (SolrServerException e) {  
  50.             e.printStackTrace();  
  51.         } catch (IOException e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.     }  
  55.       
  56.     /** 
  57.      * 基于列表的添加 
  58.      * @throws SolrServerException 
  59.      * @throws IOException 
  60.      */  
  61.     @Test  
  62.     public void test2() throws SolrServerException, IOException{  
  63.         List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();  
  64.         SolrInputDocument doc = new SolrInputDocument();  
  65.         doc.addField("id""2");  
  66.         doc.addField("msg_title""很好,solr可以工作了");  
  67.         doc.addField("msg_content""solr总算可以正式工作了");  
  68.           
  69.         docs.add(doc);  
  70.           
  71.         doc = new SolrInputDocument();  
  72.         doc.addField("id""3");  
  73.         doc.addField("msg_title""测试以下solr的添加");  
  74.         doc.addField("msg_content""看看能不能添加一个列表信息");  
  75.           
  76.         docs.add(doc);  
  77.           
  78.         CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  79.         server.add(docs);  
  80.         server.commit();  
  81.     }  
  82.       
  83.     /** 
  84.      * 基于javabean的添加 
  85.      * @throws SolrServerException 
  86.      * @throws IOException 
  87.      */  
  88.     @Test  
  89.     public void test3() throws SolrServerException, IOException{  
  90.         List<Message> msgs = new ArrayList<Message>();  
  91.         //多值域的添加使用数组  
  92.         msgs.add(new Message("4","基于javabean的添加"new String[]{"javabean的添加附件","javabean的添加附件1"}));  
  93.         msgs.add(new Message("5","基于javabean的列表数据的添加"new String[]{"通过对象完成添加的附件","通过对象完成添加的附件1"}));  
  94.           
  95.         CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  96.         server.addBeans(msgs);  
  97.         server.commit();  
  98.     }  
  99.       
  100.     @Test  
  101.     public void test4() throws SolrServerException, MalformedURLException{  
  102.         CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  103.         //定义查询字符串  
  104.         SolrQuery query = new SolrQuery("*:*");  
  105.         //实现分页的查询  
  106.         query.setStart(0);  
  107.         query.setRows(3);  
  108.         QueryResponse res = server.query(query);  
  109.         //查询出来的结果都保存在SolrDocumentList中  
  110.         SolrDocumentList sdl = res.getResults();  
  111.         System.out.println("总数:"+sdl.getNumFound());  
  112.         for(SolrDocument sd : sdl){  
  113.             System.out.println(sd.get("id")+"#"+sd.get("msg_title")+"#"+sd.get("msg_content"));  
  114.         }  
  115.     }  
  116.       
  117.     @Test  
  118.     public void test5() throws MalformedURLException, SolrServerException{  
  119.         CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  120.         //相当于QueryParser  
  121.         SolrQuery query = new SolrQuery("*:*");  
  122.         query.setStart(1);  
  123.         query.setRows(3);  
  124.         QueryResponse res = server.query(query);  
  125.         //可以直接查询相应的bean对象,但是不是很常用  
  126.         //使用这种方式无法获取总数量  
  127.         List<Message> list = res.getBeans(Message.class);  
  128.         System.out.println("当前总数:"+list.size());  
  129.         for(Message msg : list){  
  130.             System.out.println(msg.getId()+"#"+msg.getTitle()+"#"+msg.getContent());  
  131.         }  
  132.     }  
  133.       
  134.     @Test  
  135.     public void test6() throws SolrServerException, MalformedURLException{  
  136.         CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  137.         SolrQuery query = new SolrQuery("msg_content:solr");  
  138.         query.setHighlight(true).setHighlightSimplePre("<span class='red'>").setHighlightSimplePost("</span>")  
  139.         .setStart(0).setRows(10);  
  140.         //hl.fl表示高亮的field,也就是高亮的区域  
  141.         query.setParam("hl.fl""msg_title,msg_content");  
  142.         QueryResponse res = server.query(query);  
  143.           
  144.         SolrDocumentList sdl = res.getResults();  
  145.         System.out.println("总数:"+sdl.getNumFound());  
  146.         for(SolrDocument sd : sdl){  
  147. //          System.out.println(sd.get("id")+"#"+sd.get("msg_title")+"#"+sd.get("msg_content"));  
  148.             String id = (String) sd.get("id");  
  149.             //在solr这里对需要加高亮的字段必须要在索引中的store=true才行  
  150.             System.out.println(id+"#"+res.getHighlighting().get(id).get("msg_content"));;  
  151.               
  152.         }  
  153.     }  
  154.       
  155.     /** 
  156.      * 测试分组 
  157.      * @throws MalformedURLException  
  158.      * @throws SolrServerException  
  159.      */  
  160.     @Test  
  161.     public void test7() throws MalformedURLException, SolrServerException{  
  162.         CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL);  
  163.         SolrQuery query = new SolrQuery("city:*");  
  164.         query.setIncludeScore(false);  
  165.         query.setFacet(true);  
  166.         query.addFacetField("city");  
  167.         query.setFacetSort(true);  
  168.         QueryResponse res = server.query(query);  
  169.         List<Count> countList = res.getFacetField("city").getValues();  
  170.           
  171.         for(Count count : countList){  
  172.             System.out.println(count.getName()+"#"+count.getCount());  
  173.         }  
  174.         /** 
  175.          * 输出结果: 
  176.          *  上海#5290 
  177.             深圳#2763 
  178.             广州#2504 
  179.             北京#1962 
  180.             东莞#1764 
  181.             杭州#1713 
  182.             苏州#1661 
  183.             南京#1529 
  184.          */  
  185.     }  
  186.   
  187.       
  188.       
  189. }  
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

http://blog.csdn.net/wxwzy738/article/details/17149433

 

 

大家可以加我个人微信号:scccdgf

 

 

或者关注soledede的微信公众号:soledede
微信公众号:
分享到:
评论

相关推荐

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

    【数据库索引库的增删改查】 ...以上就是关于索引库的增删改查操作,以及使用DataImport插件进行数据库连接和导入的基本步骤,以及如何进行复杂查询和结果处理的介绍。这些知识对于有效地管理和优化索引库至关重要。

    Solr分组统计

    在Solr中,分组统计(Grouping)是一种强大的功能,它允许用户基于某个字段对搜索结果进行分组,以便更好地理解和分析数据。分组统计可以提供每个分组内的文档数量,或者根据特定查询对每个分组进行进一步的过滤。 ...

    基于Solr的多表join查询加速方法

    在博文《基于Solr的多表join查询加速方法》中,可能详细介绍了如何实现这些策略,以及如何优化它们以提高查询速度。例如,可能讨论了以下几点: - **BitQuery.java**:这可能是一个自定义查询实现,用于在Solr中...

    Solr 查询,索引

    在本文中,我们将深入探讨Solr的查询机制和索引过程,以及如何通过工具进行操作。 一、Solr查询机制 1. **查询语法**:Solr支持丰富的查询语法,包括标准查询解析器(Standard Query Parser)和Lucene查询语法。...

    Solr 搜索引擎 asp.net实现 示例详细操作步骤

    我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...

    SpringBoot-sel-del-up-add:SpringBoot实现简单的增删改查,并集成了Redis,Solr

    SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次

    solrcore 添加修改控制

    当我们谈论“SolrCore的添加和修改控制”时,我们主要关注如何在Solr中创建、配置、更新和管理SolrCore,以及如何实现对这些操作的安全控制。 1. **创建SolrCore** 要创建一个SolrCore,你需要准备一个配置目录,...

    solr创建索引并查询

    ### Solr创建索引并查询的关键知识点 #### 一、Solr简介 Apache Solr是一款开源的全文搜索引擎平台,基于Lucene实现。它提供了一套完整的搜索解决方案,并且支持多种高级特性,如高亮显示、分面搜索、地理位置搜索...

    java solr solrj 带账号密码增量查询添加索引

    主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询

    solr查询语法.pdf

    在Solr中,高亮显示是通过名为highlight的searchComponent来实现的,它允许开发者指定哪些字段应当高亮显示,并可以自定义高亮显示的前缀和后缀。高亮显示有助于用户更容易地找到他们想要的信息。 faceted搜索是...

    solr-6.2.0源码

    Solr支持多种数据存储方式,如内存存储和硬盘存储,以及分布式索引和查询处理,使得它可以轻松应对大数据量的场景。 二、Solr的特性 1. 分布式搜索:Solr 6.2.0支持集群部署,可以将索引分片到多个节点,实现水平...

    SSM+spring-data-solr+solr7.7 全文搜索代码

    - 使用Spring Data Solr提供的`SolrTemplate`或者Repository接口,进行索引的增删改查操作。 - 将业务数据同步到Solr,构建索引,以供搜索使用。 - 在SpringMVC的Controller层处理前端请求,调用Repository接口...

    使用java实现solr-7.1.0的api和solr最新支持的sql查询

    例如,它不支持JOIN操作,但提供了丰富的聚合函数和分组功能。 在实际应用中,你还需要考虑性能优化,如使用Solr的缓存机制、分页查询、查询过滤器(Filter Queries)等。同时,为了确保高可用性和可扩展性,可能...

    Solr项目源码及solr资源包

    10. **实战演练**:通过这个项目,你可以学习如何创建Solr索引,如何编写Solr查询,如何使用Spring Data Solr进行数据的增删改查,以及如何优化搜索性能。 通过深入研究和实践这个“Solr项目源码及solr资源包”,...

    solr in action配套代码和数据

    首先,Solr是一个开源的企业级搜索平台,它基于Lucene库,提供了更高级别的API和服务,如多核心管理、分布式搜索、热插拔以及丰富的查询与排序功能。在学习Solr时,了解其基本架构和工作原理至关重要。Solr in ...

    最新版linux solr-8.8.2.tgz

    了解这些基础知识后,你就可以开始探索 Solr 8.8.2 的高级特性,如实时增删改查、多字段排序、高亮显示、同义词处理、地理位置搜索以及更复杂的查询表达式等。通过熟练掌握 Solr,你将能够构建强大而高效的全文搜索...

Global site tag (gtag.js) - Google Analytics