Solr使用solr4J操作索引库
Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互。最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。对于一些比较基础的应用,用Solj基本够用,而且你可以非常容易地通过使用Solrj的API实现与Solr搜索服务器进行交互,实现对Solr的基本管理功能。如果你的应用比较复杂,可以扩展Solrj来满足需要。
Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互。最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。对于一些比较基础的应用,用Solj基本够用,而且你可以非常容易地通过使用Solrj的API实现与Solr搜索服务器进行交互,实现对Solr的基本管理功能。如果你的应用比较复杂,可以扩展Solrj来满足需要。
使用 SolrJ操作索引库:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
package com.hcm.solr.test;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrServer;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import org.apache.solr.common.params.ModifiableSolrParams;import org.junit.Before;import org.junit.Test;import com.hcm.solr.entity.Message;public class SolrTest { private static Log logger = LogFactory.getLog(SolrTest.class); private static final String URL = "http://127.0.0.1:8086/solr"; private HttpSolrServer server = null; @Before public void init() { // 创建 server server = new HttpSolrServer(URL); } /** * 添加文档 */ @Test public void addDoc() { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "11"); doc.addField("title", "this is my document !!"); try { UpdateResponse response = server.add(doc); // 提交 server.commit(); logger.info("########## Query Time :" + response.getQTime()); logger.info("########## Elapsed Time :" + response.getElapsedTime()); logger.info("########## Status :" + response.getStatus()); } catch (SolrServerException | IOException e) { logger.error("", e); } } /** * 添加多个文档 */ @Test public void addDocs() { String[] titles = new String[] { "aaaaaaa", "bbbbbbb", "ccccccc", "dddddd", "eeeeee" }; List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); int i = 0; for (String str : titles) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", i++); doc.addField("title", str); docs.add(doc); } try { UpdateResponse response = server.add(docs); server.commit(); logger.info("########## Query Time :" + response.getQTime()); logger.info("########## Elapsed Time :" + response.getElapsedTime()); logger.info("########## Status :" + response.getStatus()); } catch (SolrServerException | IOException e) { logger.error("", e); } } /** * 添加一个Entity到索引库 */ @Test public void addBean() { Message msg = new Message("1001", "What is Fluentd?", new String[] { "Fluentd is an open source data collector for unified logging layer", "Fluentd allows you to unify data collection and consumption for a better use and understanding of data.", "Fluentd decouples data sources from backend systems by providing a unified logging layer in between.", "Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.", "Fluentd to differentiate their products with better use of data." }); try { UpdateResponse response = server.addBean(msg); server.commit(); logger.info("########## Query Time :" + response.getQTime()); logger.info("########## Elapsed Time :" + response.getElapsedTime()); logger.info("########## Status :" + response.getStatus()); } catch (SolrServerException | IOException e) { logger.error("", e); } } /** * 添加多个Entity到索引库 */ @Test public void addBeans() { List<Message> msgs = new ArrayList<Message>(); Message msg = new Message("1001", "What is Fluentd?", new String[] { "Fluentd is an open source data collector for unified logging layer", "Fluentd allows you to unify data collection and consumption for a better use and understanding of data.", "Fluentd decouples data sources from backend systems by providing a unified logging layer in between.", "Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.", "Fluentd to differentiate their products with better use of data." }); Message msg2 = new Message("1002", "What is Fluentd?", new String[] { "Fluentd is an open source data collector for unified logging layer", "Fluentd allows you to unify data collection and consumption for a better use and understanding of data.", "Fluentd decouples data sources from backend systems by providing a unified logging layer in between.", "Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.", "Fluentd to differentiate their products with better use of data." }); msgs.add(msg); msgs.add(msg2); try { UpdateResponse response = server.addBeans(msgs); server.commit(); logger.info("########## Query Time :" + response.getQTime()); logger.info("########## Elapsed Time :" + response.getElapsedTime()); logger.info("########## Status :" + response.getStatus()); } catch (SolrServerException | IOException e) { logger.error("", e); } } /** * 删除索引 */ @Test public void deleteDoc() { try { server.deleteById("0"); server.commit(); } catch (SolrServerException | IOException e) { logger.error("", e); } } /** * 更新索引<br> * solr索引库不同于数据库,没有更新的功能。如果想更新,先通过id删除对应的文档,再添加新的文档。 */ @Test public void updateDoc() { // ... ... } /** * 查询 */ @Test public void testQuery() { String queryStr = "*:*"; SolrQuery params = new SolrQuery(queryStr); params.set("rows", 10); try { QueryResponse response = server.query(params); SolrDocumentList list = response.getResults(); logger.info("########### 总共 : " + list.getNumFound() + "条记录"); for (SolrDocument doc : list) { logger.info("######### id : " + doc.get("id") + " title : " + doc.get("title")); } } catch (SolrServerException e) { logger.error("", e); } } /** * 简单查询(分页) */ @Test public void querySimple() { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("q", "this my"); params.set("q.op", "and"); params.set("start", 0); params.set("rows", 5); params.set("fl", "*,score"); try { QueryResponse response = server.query(params); SolrDocumentList list = response.getResults(); logger.info("########### 总共 : " + list.getNumFound() + "条记录"); for (SolrDocument doc : list) { logger.info("######### id : " + doc.get("id") + " title : " + doc.get("title")); } } catch (SolrServerException e) { logger.error("", e); } } /** * 查询(分页,高亮) */ @Test public void queryCase() { String queryStr = "title:this"; SolrQuery params = new SolrQuery(queryStr); params.set("start", 0); params.set("rows", 5); // 启用高亮组件, 设置高亮 params.setHighlight(true) .addHighlightField("title") .setHighlightSimplePre("<span class=\"red\">") .setHighlightSimplePost("</span>") .setHighlightSnippets(2) .setHighlightFragsize(1000) .setStart(0) .setRows(10) .set("hl.useFastVectorHighlighter", "true") .set("hl.fragsize", "200"); try { QueryResponse response = server.query(params); SolrDocumentList list = response.getResults(); logger.info("########### 总共 : " + list.getNumFound() + "条记录"); for (SolrDocument doc : list) { logger.info("######### id : " + doc.get("id") + " title : " + doc.get("title")); } Map<String, Map<String, List<String>>> map = response.getHighlighting(); Iterator<String> iterator = map.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); Map<String, List<String>> values = map.get(key); logger.info("############################################################"); logger.info("############ id : " + key); for (Map.Entry<String, List<String>> entry : values.entrySet()) { String subKey = entry.getKey(); List<String> subValues = entry.getValue(); logger.info("############ subKey : " + subKey); for (String str : subValues) { logger.info("############ subValues : " + str); } } } } catch (SolrServerException e) { logger.error("", e); } }} |
POJO:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package com.hcm.solr.entity;import java.io.Serializable;import org.apache.solr.client.solrj.beans.Field;public class Message implements Serializable { /** * */ private static final long serialVersionUID = 1L; 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("id") public void setId(String id) { this.id = id; } public String getTitle() { return title; } @Field("title") public void setTitle(String title) { this.title = title; } public String[] getContent() { return content; } @Field("content") public void setContent(String[] content) { this.content = content; }}
|
Solr使用solr4J操作索引库的更多相关文章
- 使用solrj操作solr索引库
(solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...
- 使用solrj操作solr索引库,solr是lucene服务器
客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...
- JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现
1 学习回顾 1. Lucene 是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容 顺序扫描法 全文检索 3. 什么是全文检索? 这种先创建索引 再 ...
- (转)淘淘商城系列——使用solrj来测试索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否 ...
- Lucene 07 - 对Lucene的索引库进行增删改查
目录 1 添加索引 2 删除索引 2.1 根据Term删除索引 2.2 删除全部索引(慎用) 3 更新索引 数据保存在关系型数据库中, 需要实现增.删.改.查操作; 索引保存在索引库中, 也需要实现增 ...
- (转)淘淘商城系列——导入商品数据到索引库——Service层
http://blog.csdn.net/yerenyuan_pku/article/details/72894187 通过上文的学习,我相信大家已经学会了如何使用Solrj来操作索引库.本文我们将把 ...
- 如何在分布式环境中同步solr索引库和缓存信息
天气依旧很好,主要是凉快.老习惯,我在北京向各位问好. 搜索无处不在,相信各位每天都免不了与它的亲密接触,那么我想你确实有必要来了解一下它们,就上周在公司实现的一个小需求来给各位分享一下:如何在分布式 ...
- JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现
1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...
- lucene&solr学习——solr学习(二) Solr管理索引库
1.什么是solrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 依赖jar包: 2 ...
随机推荐
- OC - 31.通过封装的自定义布局快速实现商品展示
概述 实现效果 设计思路 采用MVC架构,即模型—视图-控制器架构 使用MJExtension框架实现字典转模型 使用MJRefresh框架实现上拉和下拉刷新 上拉刷新,加载新的数据 下拉刷新,加载更 ...
- iOS6以后的单个控制器横竖屏显示以及旋转屏控制技巧,附带iOS8以后显示电池状态栏
一.在应用中从竖屏模式强制转换为横屏模式 第一种方法:通过模态弹出视图的方式,使得特定ViewController坚持特定的interfaceOrientation(1)iOS6之后提供了这样一个方法 ...
- 移动触摸事件(touchstart、touchmove和touchend)
touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发. touchmove事件:当手指在屏幕上滑动的时候连续地触发.在这个事件发生期间,调用preventDefaul ...
- 第二篇、Maven快速上手
1.目标 该篇主要是为了快速利用maven来构建工程,maven作为项目管理的工具已经得到极大程度的应用,很多开源项目都用maven来构建.如何建立 一个maven工程,如何导入别人的maven工程, ...
- 复制JAVABEAN中的属性到另外一个JAVABEAN中
下午写了一个属性复制方法,记录如下: class POUtil{ /** * * Function : 将一个source中的属性到复制到dest * @author : Liaokailin * C ...
- socket 编程基础
一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...
- 利用Python读取Matlab的Mat文件内容
手头有别人写的Matlab程序,其中用到了Mat文件.现在不想安装Matlab,却又想读取Mat文件内容,该怎么办呢? 感谢scipy!!! import scipy.io data = scipy. ...
- 利用HTML5分片上传超大文件
在网页中直接上传大文件一直是个比较头疼的问题,主要面临的问题一般包括两类:一是上传时间长中途一旦出错会导致前功尽弃:二是服务端配置复杂,要考虑接收超大表单和超时问题,如果是托管主机没准还改不了配置,默 ...
- GO:格式化代码
http://www.ituring.com.cn/article/39380 Go 开发团队不想要 Go 语言像许多其它语言那样总是在为代码风格而引发无休止的争论,浪费大量宝贵的开发时间,因此他们制 ...
- Windows Phone 学习笔记(一) 数据存储
独立存储设置IsolatedStorageSetting private IsolatedStorageSettings _appSettings; public MainPage() { Initi ...