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. 用indexof来统计字符出现的次数

    代码如下: <!DOCTYPE html> <html lang="en"> <head>     <meta charset=" ...

  2. AOP的第一个小坑

    今天看项目源码,看到Service类继承了一个SelfProxy类,这个类实现了一个叫self()的方法,用于返回动态代理生成的实例. 为什么要返回实例呢,因为有的时候类内部需要调用自身的public ...

  3. Ubuntu 将其他盘挂载到/home的子目录下

    Ubuntu 14.04 将其他盘挂载到/home的子目录下当安装完Ubuntu系统,由于当时没有注意,分配的分区空间太小.经过一段时间安装了各式各样的软件后,常常会遇到/home目录下空间不够的情况 ...

  4. C# 树状图

    效果图: 结构: frmMain层 using hierarchy.BLL; using hierarchy.Model; using System; using System.Collections ...

  5. js中日期格式与时间戳格式互换

    2014-04-23 18:55:49:123    日期格式 1398250549123        时间戳格式 前台显示日期格式,则 function tsToTime(ts) { var da ...

  6. 记一次禁止chrome打印出现空白页的情况

    项目中遇到一个问题:就是chrome浏览器打印时,会多少出一张空白页.经过Google,问题解决.

  7. Appium环境搭建——安卓模拟器(AVD)调试 2-运行Apk失败点的总结

    如何优化AVD模拟器运行速度? 解决方法:开启IntelHAXM 查询intelhaxm是否已经开启: sc query intelhaxm 若开启成功,则如图所示 若没有开启,可以通过BIOS打开, ...

  8. vue项目打包后的资源路径问题

    最近做的vue项目,本地测试完成后,build上线,却发现了文件路径问题,提示各种诸如js,css等资源找不到的错: 正确解决方式有两种,一种是绝对路径配置,详细可以网上查,个人推荐第二种相对路径,这 ...

  9. 如何让input框显示在一行?

    案例: <input type="float:left" value="aaaa"> <input type="float:left ...

  10. 20164301 Exp1 PC平台逆向破解

    逆向及Bof基础实践 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数, foo函数会简单回显任何用户输入的字符串.该程序同时包含另一 ...