SolrJ的使用

1、添加依赖

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.myx.solr</groupId>
<artifactId>day11solr</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- Junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<!-- Solr底层会使用到slf4j日志系统 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build> </project>

2、创建实体类

 package pojo;

 import org.apache.solr.client.solrj.beans.Field;

 public class Item {
@Field //表明当前字段要添加到索引库中
private long id;
@Field
private String title;
@Field
private long price; public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public long getPrice() {
return price;
} public void setPrice(long price) {
this.price = price;
}
}

3、SolrJ的增删改查

3.1使用Document向Solr添加或修改索引

 /*
5 *
6 * 使用Document向Solr添加或修改索引*/
7 @Test
8 public void testWrite1() throws IOException, SolrServerException {
9 //连接Solr服务器
10 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
11 //创建Solr的输入Document
12 SolrInputDocument document = new SolrInputDocument();
13
14 //添加字段
15 document.addField("id",15L);
16 document.addField("title","锤子手机,老罗会吹");
17 document.addField("price",992210);
18
19 //添加Document到server
20 server.add(document);
21
22 //提交请求,如果id不存在,则添加新数据,如果存在,则修改数据
23 server.commit();
24 }

3.2使用注解和JavaBean向Solr中添加或修改数据


 /*
27 * 使用注解和JavaBean向Solr中添加或修改数据
28 * */
29 @Test
30 public void testWrite2() throws IOException, SolrServerException {
31 //连接Solr服务器
32 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
33 //创建一个实体对象
34 Item item = new Item();
35 item.setId(16);
36 item.setTitle("oppo手机,照亮你的美");
37 item.setPrice(23330);
38
39 //将对象添加到Server
40 server.addBean(item);
41 //提交请求,如果id不存在,则添加新数据,如果存在就修改数据
42 server.commit();
43 }

3.3 SolrJ删除索引数据

  45     /*
46 * SolrJ删除索引数据
47 *
48 * */
49
50 @Test
51 public void testDelete() throws IOException, SolrServerException {
52 //连接Solr服务器
53 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
54
55 //根据id删除数据,注意这里需要传字符串
56 // server.deleteById("16");
57
58 //根据查询条件删除,参数是字符串格式,写出查询条件
59 server.deleteByQuery("title:Apple");
60 //提交
61 server.commit();
62 }
63

3.4 使用Solr查询索引,返回的是Document形式

 /*
65 * 使用Solr查询索引,返回的是Document形式
66 * */
67 @Test
68 public void testQueryDocument() throws SolrServerException {
69 //连接Solr服务器
70 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
71
72 //创建查询对象
73 SolrQuery solrQuery = new SolrQuery("title:华为");
74
75 //执行查询,获取响应
76 QueryResponse response = server.query(solrQuery);
77
78 //获取查询结果,本质是一个Document的集合
79 SolrDocumentList results = response.getResults();
80 //获取总条数
81 System.out.println("本次共搜索到" + results.size() + "条数据");
82
83 //遍历集合
84 for (SolrDocument document : results) {
85 System.out.println("id" + document.getFieldValue("id"));
86 System.out.println("title" + document.getFieldValue("title"));
87 System.out.println("price" + document.getFieldValue("price"));
88 }
89 }

3.5使用SolrJ查询索引,返回的是JavaBean

 /*
92 * 使用SolrJ查询索引,返回的是JavaBean
93 * */
94
95 @Test
96 public void testQueryBeans() throws SolrServerException {
97 //连接Solr服务器
98 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
99
100 //创建查询对象:SolrQuery
101 SolrQuery query = new SolrQuery("title:华为");
102 //执行查询,获取响应
103 QueryResponse response = server.query(query);
104
105 //获取查询结果,指定实体类的类型,返回实体类的集合
106 List<Item> list = response.getBeans(Item.class);
107
108 //打印总条数
109 System.out.println("本次共搜索到" + list.size() + "条数据");
110
111 //遍历集合
112 for (Item item : list) {
113 System.out.println(item.getId());
114 System.out.println(item.getTitle());
115 System.out.println(item.getPrice());
116 }
117 }
118

4 高级查询

4.1布尔查询

 /*
121 * 布尔查询
122 * */
123 @Test
124 public void testQueryBoolean() throws SolrServerException {
125 //连接Solr服务器
126 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
127
128 //创建查询对象:SolrQuery,并且使用Boolean操作,可选OR AND ONT
129 SolrQuery query = new SolrQuery("title:华为 OR 小米");
130 //执行查询,获取响应
131 QueryResponse response = server.query(query);
132
133 //获取查询结果,指定实体类的类型,返回实体类的集合
134 List<Item> list = response.getBeans(Item.class);
135
136 //打印总条数
137 System.out.println("本次共搜索到" + list.size() + "条数据");
138
139 //遍历集合
140 for (Item item : list) {
141 System.out.println(item.getId());
142 System.out.println(item.getTitle());
143 System.out.println(item.getPrice());
144 }
145 }
146

4.2 相似度查询

 148     /*
149 * 相似度查询
150 * */
151 @Test
152 public void testFuzzyQuery() throws SolrServerException {
153 //连接Solr服务器
154 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
155
156 //相似度查询,与lucene的相似度查询一致,允许的编辑举例是0-2,默认是2
157 SolrQuery query = new SolrQuery("title:applk~");
158 //执行查询,获取响应
159 QueryResponse response = server.query(query);
160
161 //获取查询结果,指定实体类的类型,返回实体类的集合
162 List<Item> list = response.getBeans(Item.class);
163
164 //打印总条数
165 System.out.println("本次共搜索到" + list.size() + "条数据");
166
167 //遍历集合
168 for (Item item : list) {
169 System.out.println(item.getId());
170 System.out.println(item.getTitle());
171 System.out.println(item.getPrice());
172 }
173 }
174

4.3 范围查询,闭区间

 176     /*
177 * 范围查询,闭区间
178 * */
179 @Test
180 public void testScoreQuery() throws SolrServerException {
181 //连接Solr服务器
182 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
183
184 //创建查询对象
185 SolrQuery query = new SolrQuery("price:[100000 TO 200000]");
186 //执行查询,获取响应
187 QueryResponse response = server.query(query);
188
189 //获取查询结果,指定实体类的类型,返回实体类的集合
190 List<Item> list = response.getBeans(Item.class);
191
192 //打印总条数
193 System.out.println("本次共搜索到" + list.size() + "条数据");
194
195 //遍历集合
196 for (Item item : list) {
197 System.out.println(item.getId());
198 System.out.println(item.getTitle());
199 System.out.println(item.getPrice());
200 }
201 }
202

4.4 使用SolrJ查询索引,并且设置排序

 /*
205 * 使用SolrJ查询索引,并且设置排序
206 * */
207
208 @Test
209 public void testSortedQuery() throws SolrServerException {
210 //连接Solr服务器
211 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
212
213 //创建查询对象
214 SolrQuery query = new SolrQuery("title:华为");
215
216 //设置查询的排序参数,参数:排序的字段名、排序方式
217 query.setSort("price", SolrQuery.ORDER.desc);
218
219 //执行查询,获取响应
220 QueryResponse response = server.query(query);
221
222 //获取查询结果,指定实体类的类型,返回实体类的集合
223 List<Item> list = response.getBeans(Item.class);
224
225 //打印总条数
226 System.out.println("本次共搜索到" + list.size() + "条数据");
227
228 //遍历集合
229 for (Item item : list) {
230 System.out.println(item.getId());
231 System.out.println(item.getTitle());
232 System.out.println(item.getPrice());
233 }
234 }

4.5 查询索引并且分页

 /*
237 * 查询索引并且分页
238 * */
239 @Test
240 public void testPageQuery() throws SolrServerException {
241 //准备分页参数
242 int pageNum = 2; //查询的页数
243 int pageSize = 5; // 每页显示条数
244 int start = (pageNum - 1) * pageSize;//当前页的起始条数
245
246 //连接Solr服务器
247 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
248
249 //创建查询对象
250 SolrQuery query = new SolrQuery("title:手机");
251
252 //设置查询的排序参数,参数:排序的字段名、排序方式
253 query.setSort("price", SolrQuery.ORDER.desc);
254
255 //设置分页信息到查询对象中
256 query.setStart(start);
257 query.setRows(5);
258
259 //执行查询,获取响应
260 QueryResponse response = server.query(query);
261
262 //获取查询结果,指定实体类的类型,返回实体类的集合
263 List<Item> list = response.getBeans(Item.class);
264
265 //打印总条数
266 System.out.println("本次共搜索到" + list.size() + "条数据");
267
268 //遍历集合
269 for (Item item : list) {
270 System.out.println(item.getId());
271 System.out.println(item.getTitle());
272 System.out.println(item.getPrice());
273 }
274 }

4.6 查询索引并且高亮

   /*
278 * 查询索引并且高亮
279 * */
280 @Test
281 public void testHighlightQuery() throws SolrServerException {
282 //连接Solr服务器
283 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core2");
284
285 //创建查询对象
286 SolrQuery query = new SolrQuery("title:华为");
287
288 //设置高亮标签
289 query.setHighlightSimplePre("<em>");
290 query.setHighlightSimplePost("</em>");
291
292 //高亮字段
293 query.addHighlightField("title");
294
295 //执行查询,获取响应
296 QueryResponse response = server.query(query);
297
298 // 解析高亮响应结果,是一个Map
299 // 外层的Map:它的键是文档的id,值是这个文档的其它高亮字段,又是一个Map
300 // 内存的Map:是其它高亮字段,键是其它字段的名称,值是这个字段的值,这个值是一个List
301 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
302 //获取查询结果,指定实体类的类型,返回实体类的集合
303 List<Item> list = response.getBeans(Item.class);
304
305 //打印总条数
306 System.out.println("本次共搜索到" + list.size() + "条数据");
307
308 //遍历集合
309 for (Item item : list) {
310 long id = item.getId();
311 System.out.println("id: " + id);
312 // 这里ID是long类型,与集合的键不匹配,所以我们需要把id转为String类型,再get
313 System.out.println("title: " + highlighting.get(id+"").get("title").get(0));
314 System.out.println("price: " + item.getPrice());
315
316 }
317 }

SolrJ的使用的更多相关文章

  1. 我与solr(四)--solrJ

    SolrJ索引库: solr提供的一个客户端操作框架,在文件/solr6.2/dist下面可以找到该jar包solrj.jar以及相关jar包,可以使用maven添加. java使用solrJ如下: ...

  2. Solrj和Solr DIH索引效率对比分析

    测试软件环境: 1.16G windows7 x64  32core cpu . 2.jdk 1.7  tomcat 6.x  solr 4.8 数据库软件环境: 1.16G windows7 x64 ...

  3. Solr JAVA客户端SolrJ 4.9使用示例教程

    http://my.oschina.net/cloudcoder/blog/305024 简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.So ...

  4. [solr] - SolrJ增删查

    使用SolrJ进行对Solr的增.删.查功能. 参考引用: http://wiki.apache.org/solr/Solrj Eclipse中新建一个项目:TestSolr 其中SorlJ的Lib包 ...

  5. 【solr】java整合solr5.0之solrj的使用

    1.首先导入solrj需要的的架包 2.需要注意的是低版本是solr是使用SolrServer进行URL实例的,5.0之后已经使用SolrClient替代这个类了,在添加之后首先我们需要根据schem ...

  6. Solr5.3.1 SolrJ查询索引结果

    通过SolrJ获取Solr检索结果 1.通过SolrParams的方式提交查询参数 SolrClient solr = new HttpSolrClient("http://localhos ...

  7. 使用solrj操作solr索引库

    (solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...

  8. Solr使用初探——SolrJ的使用

    二.SolrJ的使用 SolrJ覆盖了solr的全部功能,下面将自己在实际开发中所使用的程序粘贴出来并适当加以解释,由于本人比较菜,代码书写不是那么的精练,还请见谅. 1.  创建solrserver ...

  9. 使用solrj进行DIH操作

    背景说明:在一个项目中需要将Mongodb中的数据导入到solr中完成搜索.在solr中Mysql数据库有对应的DIH包,可以通过配置sql语句完成数据的导入.Mongodb下也有开源的工具用来实现数 ...

  10. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

随机推荐

  1. call Apply bind详解

    call方法: 语法:call(thisObj,'',''........) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 说明:call方法可以用来代替另一个对象调用一个方法.call方法 ...

  2. FireFox 插件xpi文件签名2

    上一篇https://www.cnblogs.com/nightnine/p/6140676.html 提交到官方网站上的签名,官方已经拒绝了 于是手动自己签名 官方文档:https://develo ...

  3. docker学习笔记(2)

    docker镜像及容器常用命令 一.docker镜像 docker pull # docker pull nginx Using default tag: latest latest: Pulling ...

  4. MSP430中断的一个细节问题

    关于中断标志: 从SPI发送一字节数据: void SPI_Set_SD_Byte(unsigned char txData) { UCB0TXBUF = txData; // 写入发送缓冲区 whi ...

  5. 运维yum搭建zabbix

    前言:           zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.           zabbix能监视各种网络参数,保证 ...

  6. 搭建SSM(Spring+SpringMVC+Mybatis)

    1.SpringMVC和Spring不需要什么特殊配置就可以结合 2.Mybatis和Spring (1)需要引入额外的jar包:mybatis-spring-1.2.2.jar (2)配置数据源 ( ...

  7. canvas绘制随机验证码

    效果图: 思路: 1, 绘制canvas画布,进行基础设置 2.绘制一个矩形 3.设置验证码的随机数 4.设置验证码随机数的随机颜色 5.绘制随机干扰线 6,绘制随机干扰点 经过以上六个步骤,验证码的 ...

  8. java方法 throws exception 事务回滚机制

    使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检 ...

  9. Blob与Clob转字符串

    /** * blob转字符串 * * @param blob * @return * @throws IOException * @throws SQLException */ public stat ...

  10. 测试那些事儿-软测必备的linux知识(五)

    1.进程管理 1.1进程概述 在Linux中,每个执行的程序都称为一个进程,每个进程都分配一个ID号 每个进程,都会对应一个父进程,这个父进程可以复制多个子进程, 每个进程可能以两种方式存在,前台与后 ...