代码如下:
- 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 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
- */
- }
- }
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
微信公众号:
相关推荐
【数据库索引库的增删改查】 ...以上就是关于索引库的增删改查操作,以及使用DataImport插件进行数据库连接和导入的基本步骤,以及如何进行复杂查询和结果处理的介绍。这些知识对于有效地管理和优化索引库至关重要。
在Solr中,分组统计(Grouping)是一种强大的功能,它允许用户基于某个字段对搜索结果进行分组,以便更好地理解和分析数据。分组统计可以提供每个分组内的文档数量,或者根据特定查询对每个分组进行进一步的过滤。 ...
在博文《基于Solr的多表join查询加速方法》中,可能详细介绍了如何实现这些策略,以及如何优化它们以提高查询速度。例如,可能讨论了以下几点: - **BitQuery.java**:这可能是一个自定义查询实现,用于在Solr中...
在本文中,我们将深入探讨Solr的查询机制和索引过程,以及如何通过工具进行操作。 一、Solr查询机制 1. **查询语法**:Solr支持丰富的查询语法,包括标准查询解析器(Standard Query Parser)和Lucene查询语法。...
我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...
SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次
当我们谈论“SolrCore的添加和修改控制”时,我们主要关注如何在Solr中创建、配置、更新和管理SolrCore,以及如何实现对这些操作的安全控制。 1. **创建SolrCore** 要创建一个SolrCore,你需要准备一个配置目录,...
### Solr创建索引并查询的关键知识点 #### 一、Solr简介 Apache Solr是一款开源的全文搜索引擎平台,基于Lucene实现。它提供了一套完整的搜索解决方案,并且支持多种高级特性,如高亮显示、分面搜索、地理位置搜索...
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
在Solr中,高亮显示是通过名为highlight的searchComponent来实现的,它允许开发者指定哪些字段应当高亮显示,并可以自定义高亮显示的前缀和后缀。高亮显示有助于用户更容易地找到他们想要的信息。 faceted搜索是...
Solr支持多种数据存储方式,如内存存储和硬盘存储,以及分布式索引和查询处理,使得它可以轻松应对大数据量的场景。 二、Solr的特性 1. 分布式搜索:Solr 6.2.0支持集群部署,可以将索引分片到多个节点,实现水平...
- 使用Spring Data Solr提供的`SolrTemplate`或者Repository接口,进行索引的增删改查操作。 - 将业务数据同步到Solr,构建索引,以供搜索使用。 - 在SpringMVC的Controller层处理前端请求,调用Repository接口...
例如,它不支持JOIN操作,但提供了丰富的聚合函数和分组功能。 在实际应用中,你还需要考虑性能优化,如使用Solr的缓存机制、分页查询、查询过滤器(Filter Queries)等。同时,为了确保高可用性和可扩展性,可能...
10. **实战演练**:通过这个项目,你可以学习如何创建Solr索引,如何编写Solr查询,如何使用Spring Data Solr进行数据的增删改查,以及如何优化搜索性能。 通过深入研究和实践这个“Solr项目源码及solr资源包”,...
首先,Solr是一个开源的企业级搜索平台,它基于Lucene库,提供了更高级别的API和服务,如多核心管理、分布式搜索、热插拔以及丰富的查询与排序功能。在学习Solr时,了解其基本架构和工作原理至关重要。Solr in ...
了解这些基础知识后,你就可以开始探索 Solr 8.8.2 的高级特性,如实时增删改查、多字段排序、高亮显示、同义词处理、地理位置搜索以及更复杂的查询表达式等。通过熟练掌握 Solr,你将能够构建强大而高效的全文搜索...