第一步:添加maven依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>6.5.1</version>
</dependency>
第二步:书写solr连接类
package solrTest;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
/**
*
* @ClassName: SolrServer
* @Description: solr连接类
* @author cheng
* @date
public class SolrServer
private static HttpSolrClient server = null;
private static String url = "http://localhost:8080/Solr/db";//其中db为自定义的core名称
@SuppressWarnings("deprecation")
public static HttpSolrClient getServer() {
if (server == null) {
server = new HttpSolrClient(url);
server.setDefaultMaxConnectionsPerHost(1000);
server.setMaxTotalConnections(10000);// 最大连接数
server.setConnectionTimeout(60000);// 设置连接超时时间(单位毫秒) 1000
server.setSoTimeout(60000); 设置读数据超时时间(单位毫秒) 1000
server.setFollowRedirects(false);// 遵循从定向
server.setAllowCompression(true);// 允许压缩
}
return server;
}
//测试
public static void main(String[] args) {
System.out.println(getServer());
}
}
第三步:书写原生测试类
package solrTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrQuery.SortClause;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.junit.Test;
import com.ahutshop.entity.GoodsType;
/**
*
* @ClassName: SolrTest
* @Description:测试
* @author cheng
* @date 2017年7月24日 上午9:16:58
*/
public class SolrTest {
/**
* 添加/修改 索引
* @throws Exception
*/
public static void addIndex() throws Exception {
HttpSolrClient server = SolrServer.getServer();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("typeId", UUID.randomUUID().toString().replace("-", ""));
// 修改相同id的信息
// doc.addField("typeId", "e0e2283932194628b6a5eee9c263c533");
doc.addField("typeName", "测试测试测试多个测试");
doc.addField("createTime", new Date());
doc.addField("updateTime", new Date());
server.add(doc);
server.commit();
}
/**
* 删除索引 按id
* @throws Exception
*/
public static void deleteById() throws Exception {
HttpSolrClient server = SolrServer.getServer();
server.deleteById("48815aa736da482dbb47e1eed06cc68a");// 按id删除
server.commit();
}
/**
* 查询所有索引
* @throws Exception
*/
public static void query() throws Exception {
HttpSolrClient server = SolrServer.getServer();
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setStart(0);// 开始记录数
query.setRows(10000);// 总条数
QueryResponse queryResponse = server.query(query);
SolrDocumentList results = queryResponse.getResults();
System.out.println("总条数为:" + results.getNumFound());
for (int i = 0; i < results.size(); i++) {
System.out.println(results.get(i).getFieldNames());
for (String name : results.get(i).getFieldNames()) {
System.out.println(results.get(i).getFieldValue(name));
第四步:创建javabean
package com.ahutshop.entity;
import java.io.Serializable;
import java.util.Date;
import org.apache.solr.client.solrj.beans.Field;
/**
*
* @ClassName: GoodsType
* @Description: 商品类型实体类
* @author cheng
* @date
public class GoodsType implements Serializable{
private static final long serialVersionUID = -4039634130866820668L;
@Field
private String typeId;//类型id
@Field
private String typeName;//类型名称
@Field
private Date createTime;//创建时间
@Field
private Date updateTime;//更新时间
/**
* 重写tostring
*/
@Override
public String toString() {
return "GoodsType [typeId=" + typeId + ", typeName=" + typeName + ", createTime=" + createTime + ", updateTime="
+ updateTime + "]";
}
/**
* 无参构造函数
*/
public GoodsType() {
super();
}
/**
* 有参构造函数
* @param typeId
* @param typeName
* @param createTime
* @param
public GoodsType(String typeId, String typeName, Date createTime, Date updateTime) {
super();
this.typeId = typeId;
this.typeName = typeName;
this.createTime = createTime;
this.updateTime = updateTime;
}
public String getTypeId() {
return typeId;
}
public void setTypeId(String typeId) {
this.typeId = typeId;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
第五步:使用SolrBean进行增删改查
public class SolrBean
/**
* 按Bean 添加/修改 索引
* @throws
public static void addIndex1() throws Exception {
HttpSolrClient server = SolrServer.getServer();
// 添加
//id如果重复则为修改
GoodsType type = new GoodsType(UUID.randomUUID().toString().replace("-", ""), "交通工具测试", new Date(), new Date());
server.addBean(type);
server.commit();
}
/**
* 删除索引 按查询
* @throws
public static void deleteByQuery(String query) throws Exception {
HttpSolrClient server = SolrServer.getServer();
query = "*:*";
server.deleteByQuery(query);
server.commit();
}
// 查询索引
public static void query1() throws Exception {
HttpSolrClient server = SolrServer.getServer();
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setStart(0);// 开始记录数
query.setRows(10000);// 总条数
QueryResponse queryResponse = server.query(query);
List<GoodsType> results = queryResponse.getBeans(GoodsType.class);
System.out.println("总条数为:" + results.size());
for
第六步:solrj复杂查询
// 查询索引
public static void query1() throws Exception {
HttpSolrClient server = SolrServer.getServer();
SolrQuery query = new SolrQuery();
/*
* 1、常用 q :查询字符串,这个是必须的。如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京)
* 注意:AND要大写 否则会被当做默认OR
*/
//query.setQuery("*:*");
/*
* fq : (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,
* 例如:q=查询全部&fq=只要title得值为:xxxx
*/
//query.setFilterQueries("typeName:测试");
/*
* fl : 指定返回那些字段内容,用逗号或空格分隔多个。
*/
// query.setFields("typeId,typeName");
/*
* sort : 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]…
* 。 示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。
*/
SortClause sort1 = new SortClause("createTime", ORDER.asc);
SortClause sort2 = new SortClause("updateTime", ORDER.desc);
List<SortClause> sortList = new ArrayList<SortClause>();
sortList.add(sort1);
sortList.add(sort2);
// query.setSort("createTime", ORDER.asc);
query.setSorts(sortList);
query.setQuery("typeName:测试"); // 设置查询关键字
query.setHighlight(true); // 开启高亮
query.addHighlightField("typeName"); // 高亮字段
query.setHighlightSimplePre("<font color='red'>"); // 高亮单词的前缀
query.setHighlightSimplePost("</font>"); // 高亮单词的后缀
query.setStart(0);// 开始记录数
query.setRows(10000);// 总条数
// QueryResponse queryResponse = server.query(query);
// List<GoodsType> results = queryResponse.getBeans(GoodsType.class);
// System.out.println("总条数为:" + results.size());
// for (GoodsType testBean : results) {
// System.out.println(testBean.toString());
// }
QueryResponse queryResponse = server.query(query);
List<GoodsType> results = queryResponse.getBeans(GoodsType.class);
int index = 0;
// 返回所有的结果...
SolrDocumentList documentList = queryResponse.getResults();
Map<String, Map<String, List<String>>> maplist = queryResponse.getHighlighting();
System.out.println(documentList);
System.out.println(maplist);
for(SolrDocument document : documentList){
String typeId = (String) document.getFieldValue("typeId");
String typeName = maplist.get(typeId).get("typeName").get(0);
results.get(index).setTypeName(typeName);
index++;
}
for(GoodsType type : results){
System.out.println(type);
















