第一步:添加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 2017年7月24日 上午9:15:51
*/
public class SolrServer {
private static HttpSolrClient server = null;
private static String url = "http://localhost:8080/Solr/db";
@SuppressWarnings("deprecation")
public static HttpSolrClient getServer() {
if (server == null) {
server = new HttpSolrClient(url);
server.setDefaultMaxConnectionsPerHost(1000);
server.setMaxTotalConnections(10000);
server.setConnectionTimeout(60000);
server.setSoTimeout(60000);
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
public class SolrTest {
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()
}
public static void deleteById() throws Exception {
HttpSolrClient server = SolrServer.getServer()
server.deleteById("48815aa736da482dbb47e1eed06cc68a")
server.commit()
}
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
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 2017年7月12日 下午5:37:33
*/
public class GoodsType implements Serializable{
private static final long serialVersionUID = -4039634130866820668L;
@Field
private String typeId;
@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 updateTime
*/
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 Exception
*/
public static void addIndex1() throws Exception {
HttpSolrClient server = SolrServer.getServer();
GoodsType type = new GoodsType(UUID.randomUUID().toString().replace("-", ""), "交通工具测试", new Date(), new Date());
server.addBean(type);
server.commit();
}
/**
* 删除索引 按查询
* @throws Exception
*/
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 (GoodsType testBean : results) {
System.out.println(testBean.toString());
}
}
}
第六步:solrj复杂查询
// 查询索引
public static void query1() throws Exception {
HttpSolrClient server = SolrServer.getServer()
SolrQuery query = new SolrQuery()
//query.setQuery("*:*")
//query.setFilterQueries("typeName:测试")
// query.setFields("typeId,typeName")
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)
}
}