Solr中初学Demo

简介:

 

复制代码
  1 import java.util.Collection;
  2 import java.util.Date;
  3 
  4 import org.apache.solr.client.solrj.SolrQuery;
  5 import org.apache.solr.client.solrj.impl.HttpSolrServer;
  6 import org.apache.solr.client.solrj.response.QueryResponse;
  7 import org.apache.solr.common.SolrDocument;
  8 import org.apache.solr.common.SolrDocumentList;
  9 import org.apache.solr.common.SolrInputDocument;
 10 import org.junit.Test;
 11 
 12 public class TestSolr {
 13     
 14     String baseURL = "http://192.168.1.99:8983/solr";
 15     HttpSolrServer httpSolrServer = new HttpSolrServer(baseURL);
 16     
 17     /**
 18      * 获取操作solr的客户端对象
 19      * @throws Exception
 20      */    
 21     @Test
 22     public void test1() {
 23         //指定solr的连接地址,注意:默认情况下连接的是collection1这个索引库
 24         //下面的两个baseurl效果一样
 25         //String baseURL = "http://192.168.1.171:8983/solr/collection1";        
 26         String baseURL = "http://192.168.1.99:8983/solr";
 27         HttpSolrServer httpSolrServer = new HttpSolrServer(baseURL);        
 28         System.out.println(httpSolrServer.toString());
 29     }
 30 
 31     /**
 32      * 建立索引-1
 33      * 
 34      * add(HttpSolrServer server,SolrInputDocument doc){
 35      *         server.add(doc);
 36      *         server.commit();
 37      * }
 38      * @throws Exception
 39      */
 40     @Test
 41     public void test2() throws Exception {
 42         //把数据封装为一个document
 43         SolrInputDocument doc = new SolrInputDocument();
 44         doc.setField("id", "1");
 45         doc.setField("name", "crxy1");//这个字段必须在schema.xml文件中定义了,否则会设置失败.这里id和name都已经在schema.xml文件中定义了.
 46         doc.setField("last_modified", new Date());
 47         //把这个文档添加到solr中
 48         httpSolrServer.add(doc);//也会把数据添加到内存中,但是查询不到,因为没有在内存中生成segment,执行软提交的时候才会生成
 49         //把这个添加操作提交
 50         httpSolrServer.commit();//(硬提交)这个提交其实是表示把索引数据直接提交到硬盘中,并且可以保证数据能够查询到
 51         //httpSolrServer.commit(true, true, true);//软提交,数据保存在内存中,并且保证数据可以查询
 52         /**
 53          * 在工作中,不建议没add一条数据,就硬提交一次,这样太消耗性能
 54          * 建议,为了保证实时读取到新增的数据,可以,每add一条数据,就调用一次软提交
 55          * 如果对数据的实时查询要求不是很高,建议在批量添加数据的时候,可以每添加1000条左右调用一次硬提交。
 56          */
 57     }
 58     
 59     /**
 60      * 建立索引-2
 61      * 这种工作中用的比较多
 62      * test2中需要自己去封装set...使用比较少...
 63      * @throws Exception
 64      */
 65     @Test
 66     public void test3() throws Exception {
 67         Person person = new Person();
 68         person.setId("22");
 69         person.setName("heeh22");
 70         
 71         httpSolrServer.addBean(person);
 72         httpSolrServer.commit();
 73     }
 74     
 75     /**
 76      * 删除
 77      * @throws Exception
 78      */
 79     @Test
 80     public void test4() throws Exception {
 81         //httpSolrServer.deleteById("1");//根据id删除
 82         httpSolrServer.deleteByQuery("id:22");//根据查询条件删除
 83         httpSolrServer.commit();
 84         
 85     }
 86     
 87     /**
 88      * 
 89      * @throws Exception
 90      */
 91     @Test
 92     public void test5() throws Exception {
 93         //组装查询条件
 94         SolrQuery params = new SolrQuery();
 95         
 96         //具体查询条件就要拼字符串
 97         params.setQuery("id:1");
 98         //params.setQuery("name:samsung");//params.setQuery()和params.set()是一样的...建议使用setQuery
 99         //params.set("q", "*:*");
100         
101         //执行查询请求
102         QueryResponse response = httpSolrServer.query(params);
103         //从response中获取返回的结果
104         SolrDocumentList results = response.getResults();
105         //获取满足条件的数据总条数
106         long numFound = results.getNumFound();
107         System.out.println("总数:"+numFound);
108         
109         //当前查询返回document文档的总数,默认最多返回10条,通过rows控制的
110         //这个获取的总数是有问题的,如果要做分页,获取总页面数,要用results.getNumFound()来获取
111         System.out.println(results.size());//如果上面params对象使用params.set("q", "*:*"); 打印的是10
112         
113         for (SolrDocument solrDocument : results) {
114             //获取文档中的所有字段
115             Collection<String> fieldNames = solrDocument.getFieldNames();
116             for (String field : fieldNames) {
117                 //打印字段和对应字段的值
118                 System.out.println(field+":"+solrDocument.get(field));
119             }
120         }
121     }
122     
123 }
复制代码

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5770576.html,如需转载请自行联系原作者

相关文章
|
Java 索引
SpringBoot2.3.x整合ElasticSearch7.6.2 实现PDF,WORD全文检索
本文使用SpringBoot2.3.x + ElasticSearch7.6.2 实现对PDF,WORD进行全文检索 实现了对文件内容快速搜索
1337 0
SpringBoot2.3.x整合ElasticSearch7.6.2 实现PDF,WORD全文检索
|
8月前
|
Java
springboot和elasticsearch以及springboot data elasticsearch对应的版本
springboot和elasticsearch以及springboot data elasticsearch对应的版本
355 1
|
分布式计算 小程序 Java
solr(四)solr目录结构
solr start –p 端口号 #单机版启动solr服务 solr restart –p 端口号 #重启solr服务 solr stop –p 端口号 #关闭solr服务
89 0
|
NoSQL Java MongoDB
SpringBoot 系列教程 Solr 之查询使用姿势小结
接下来进入 solr CURD 的第四篇,查询的使用姿势介绍,本文将主要包括以下知识点 基本的查询操作 fq 查询 fl 指定字段查询 比较/范围 排序 分页 分组
415 0
SpringBoot 系列教程 Solr 之查询使用姿势小结
Elasticsearch Search APIs2
Elasticsearch Search APIs
87 0
   Elasticsearch Search APIs2
Elasticsearch Search APIs3
Elasticsearch Search APIs3
76 0
|
关系型数据库 MySQL 测试技术
Elasticsearch Search APIs1
Elasticsearch Search APIs
103 0
|
Java
SpringBoot 系列教程 Solr 之文档删除
之前的搜索教程开了个头就没有继续了,现在重新捡回来,至少也把 CURD 的基本操作姿势补全了;本篇主要介绍如何删除数据
216 0
SpringBoot 系列教程 Solr 之文档删除
|
JSON 网络协议 测试技术
【Elasticsearch 入门公开课】详解 Elasticsearch URI Search 及 Mapping-回顾篇(4)
本周课程(15~18讲)详细介绍了 Elasticsearch URI Search 的基本概念,以及什么是 Request Body 与 Query DSL,如何通过 Query String & Simple Query String 进行查询,并对Dynamic Mapping 和常见字段类型进行了介绍。
4458 0
【Elasticsearch 入门公开课】详解 Elasticsearch URI Search 及 Mapping-回顾篇(4)
|
Java NoSQL Redis
SpringBoot整合Elasticsearch报错availableProcessors is already set to [4], rejecting [4]
Springboot整合Elasticsearch报错 今天使用SpringBoot整合Elasticsearch时候,相关的配置完成后,启动项目就报错了。
6122 0

热门文章

最新文章