|
一、配置IKAnalyzer中文分词器
Solr 版本5.2.1
IKAnalyzer2012_u6.jar报错 ,用IKAnalyzer2012_FF_hf1.jar 替换可解决
解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;)Lorg/apache/lucene/analysis/TokenStream;原因IKAnalyzer中参考手册中的例子是使用的lucene3.4,与4.0已经是不兼容了。使用IKAnalyzer2012_FF_hf1.jar可以解决问题
java.lang.AbstractMethodError
Caused by: java.lang.AbstractMethodError at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:179)
lucene版本跟IK分词版本不一致导致,这块版本一定要对应上
由于solr版本较高暂时无法解决
1
2
3
4
5
6
7
8
9
10
| <field name="messageId" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="msg_title" type="text_ik" stored="true" indexed="true"/>
<field name="msg_content" type="text_ik" stored="true" indexed="true" multiValued="true"/>
<uniqueKey>messageId</uniqueKey>
<!-- IKAnalyzer 中文分词-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer" />
<analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>
|
二、添加、删除、查询索引
需要除了solr相关包还需要下面的jar包
Message.java
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
| package org.itat.lucene.solr.test;
import org.apache.solr.client.solrj.beans.Field;
public class Message {
private String messageId;
private String title;
private String[] content;
public Message() {
super();
}
public Message(String messageId, String title, String[] content) {
super();
this.messageId = messageId;
this.title = title;
this.content = content;
}
public String getMessageId() {
return messageId;
}
@Field
public void setMessageId(String messageId) {
this.messageId = messageId;
}
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;
}
}
|
增删改查demo
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
| package org.itat.lucene.solr.test;
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.CloudSolrServer;
import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
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.junit.Before;
import org.junit.Test;
public class SolrTest {
private final static String URL = "http://localhost:8080/solr/mail";
private HttpSolrServer server = null;
@Before
public void init() {
server = new HttpSolrServer(URL);
}
@Test
public void addOneOrDelete() {
/*HttpSolrServer server=new HttpSolrServer(URL);*/
/*ConcurrentUpdateSolrServer cs=new ConcurrentUpdateSolrServer(URL,1,1);
*新版已被ConcurrentUpdateSolrClient取代
* */
/*CloudSolrServer css=new CloudSolrServer("192.168.0.1");//zookeeper地址
*已被CloudSolrClient
*/
HttpSolrClient server= new HttpSolrClient(URL);//新版已经取代了HttpSolrServer
SolrInputDocument doc = new SolrInputDocument();
//id是唯一的主键,当多次添加的时候,最后添加的相同id的域会覆盖前面的域
doc.addField("messageId","3");
doc.addField("msg_title", "这是我的第一个solrj的程序");
doc.addField("msg_content","我的solrj的程序究竟能不能跑得起来呢?");
try {
UpdateResponse ur=server.add(doc);
System.out.println(ur);
/*server.deleteByQuery("*:*");*/
server.commit(null,true,true,false);
server.close();
} catch (SolrServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//一下添加多个
@Test
public void addList() {
try {
List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("messageId", "2");
doc.addField("msg_title", "很好!solr可以工作了");
doc.addField("msg_content","slor总算可以正式工作了");
docs.add(doc);
doc = new SolrInputDocument();
doc.addField("messageId", "3");
doc.addField("msg_title", "测试一下solr的添加");
doc.addField("msg_content","看看能不能添加一个列表信息");
docs.add(doc);
server.add(docs);
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//基于java bean的添加
@Test
public void addBean() {
try {
List<Message> msgs = new ArrayList<Message>();
msgs.add(new Message("4","基于java bean的添加",
new String[]{"通过java bean完成添加","java bean的添加附件"}));
msgs.add(new Message("5","基于java bean的列表数据的添加",
new String[]{"测试如何通过一个对象完成添加","通过对象完成添加的附件"}));
server.addBeans(msgs);
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//查询
@Test
public void test04() {
try {
//定义查询字符串
SolrQuery query = new SolrQuery("*");
query.setStart(0);
query.setRows(5);
QueryResponse resp=null;
try {
resp = server.query(query);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//查询出来的结果都保存在SolrDocumentList中
SolrDocumentList sdl = resp.getResults();
System.out.println(sdl.getNumFound());
for(SolrDocument sd:sdl) {
// System.out.println(sd);
System.out.println(sd.getFieldValue("msg_title")+","+sd.getFieldValue("msg_content"));
}
} catch (SolrServerException e) {
e.printStackTrace();
}
}
//基于javabean查询
@Test
public void test05() {
try {
SolrQuery query = new SolrQuery("*");
query.setStart(0);
query.setRows(5);
QueryResponse resp=null;
try {
resp = server.query(query);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//可以直接查询相应的bean对象,但是不是很常用,无法得到查询总条数
List<Message> list = resp.getBeans(Message.class);
System.out.println(list.size());
for(Message msg:list) {
System.out.println(msg.getTitle());
}
} catch (SolrServerException e) {
e.printStackTrace();
}
}
//高亮
@Test
public void test06() {
try {
SolrQuery query = new SolrQuery("msg_content:测试 OR msg_title:测试");
query.setHighlight(true).setHighlightSimplePre("<span class='highligter'>")
.setHighlightSimplePost("</span>")
.setStart(0).setRows(5);
query.setParam("hl.fl", "msg_title,msg_content");
QueryResponse resp=null;
try {
resp = server.query(query);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//查询出来的结果都保存在SolrDocumentList中
SolrDocumentList sdl = resp.getResults();
System.out.println(sdl.getNumFound());
for(SolrDocument sd:sdl) {
String id = (String)sd.getFieldValue("messageId");
System.out.println(resp.getHighlighting().get(id).get("msg_content"));
//高亮结果以唯一索引为key
}
} catch (SolrServerException e) {
e.printStackTrace();
}
}
}
|
|
|