一: solrj通信
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
</dependency>
solrj 与 solr服务端通信方案:
1: 走Http请求形式,譬如:CommonsHttpSolrServer 、HttpSolrServer
2:访问SolrCore 譬如:SolrClient 、SolrServer
二: solrj检索
1: 多条件查询 (q)
SolrQuery parameters = new SolrQuery();
parameters.set("q", "id:1 and id:6");
QueryResponse response = null;
try {
response = server.query(parameters);
}catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
对应:http://192.168.2.254:8090/solr/collection1/select?q=*%3A*&wt=json&indent=true
2:过滤查询 (fq)
parameters.addFilterQuery("sid:*1*,id:1"); //注意先后,可变字符串(字符串数组)
3:时间区域查询 (fq)
parameters.addFilterQuery(" createtime:["+beginDate+" TO "+endDate+"]");
parameters.addFilterQuery("createtime:[2015-11-26T10:40:01Z TO 2015-12-01T09:53:17Z]");
(PS: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");)
4: 分组查询 (group=true&group.field=field)
SolrQuery parameters = new SolrQuery();
parameters.setParam(GroupParams.GROUP, true); // 是否分组查询
parameters.set(GroupParams.GROUP_TOTAL_COUNT, true); //返回分组个数
parameters.setParam(GroupParams.GROUP_FIELD,"id");
5:排序 (sort)
parameters.setSort("id", SolrQuery.ORDER.asc);
6:分页 (start=1&rows=2)
parameters.setStart(1); //开始索引
parameters.setRows(20); //记录数
统计查询 (stats=true&stats.field=field)
parameters.setGetFieldStatistics(true);
parameters.addGetFieldStatistics(searchModel.getStatsFieldArr());
7:返回结果处理
HttpSolrServer server = new HttpSolrServer("
QueryResponse response = server.query(parameters);
List<AfferToUs> list = response.getBeans(AfferToUs.class);
PS: AfferToUs 实体类 必须添加solrj注解 @Field (org.apache.solr.client.solrj.beans.Field),对应Schema.xml中配置的Field字段否则会映射不到对应字段 没有数据
8:分组结果处理
List<AfferToUs> list = new ArrayList<AfferToUs>();
GroupResponse groupResponse = response.getGroupResponse();
List<GroupCommand> list3 = groupResponse.getValues();
for (GroupCommand groupCommand : list3) {
List<Group> groups = groupCommand.getValues(); for(Group group : groups) {
SolrDocumentList result = group.getResult(); for (SolrDocument solrDocument : result) {
list.add((AfferToUs) SolrObject.toBean(solrDocument, AfferToUs.class)); } } }
PS:http://www.solr.cc/blog/?p=256
PS: http://wiki.apache.org/solr/Solrj#HttpSolrServer