代码语言:javascript复制
package com.shi.solrj;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
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.junit.Test;
/**
*
* @author: SHF
* @date: 2018年3月8日 下午1:47:48
* @Description:solrj 的使用
* 增删改查
*/
public class SolrJTest {
//添加
@Test
public void testAdd()throws Exception{
String baseURL="http://localhost:8080/solr";
//单机版
SolrServer solrServer=new HttpSolrServer(baseURL);
SolrInputDocument doc=new SolrInputDocument();
doc.setField("id", "haha");
doc.setField("name_s", "小小小施爷");
//添加
solrServer.add(doc);
//修改与添加一致 只要id一致就执行修改,不一致就是添加
solrServer.commit();
}
//删除
@Test
public void testDelete()throws Exception{
String baseURL="http://localhost:8080/solr";
//单机版
SolrServer solrServer=new HttpSolrServer(baseURL);
solrServer.deleteByQuery("*:*", 1000);//删除所有
solrServer.commit();
}
//查询
@Test
public void testSearch()throws Exception{
String baseURL="http://localhost:8080/solr";
//单机版
SolrServer solrServer=new HttpSolrServer(baseURL);
//查询关键词
SolrQuery solrQuery=new SolrQuery();
// solrQuery.set("q", "*:*");
solrQuery.setQuery("title:2");
//高亮显示
solrQuery.setHighlight(true);//打开开关
solrQuery.addHighlightField("title");//指定高亮域
solrQuery.setHighlightSimplePre("<span style='color:red'>");//设置前缀
solrQuery.setHighlightSimplePost("</span>");//设置后缀
//查询结果
QueryResponse response = solrServer.query(solrQuery);
//文档结果接
SolrDocumentList solrDocumentList = response.getResults();
//总条数
System.out.println("总条数是:" solrDocumentList.getNumFound());
/*
* Map k id v map
* map k 域名 v List
* List list.get(0)
*/
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
System.out.println("类容是:");
for (SolrDocument doc:solrDocumentList) {
System.out.println(doc.get("id"));
System.out.println(doc.get("title"));
Map<String,List<String>> map=highlighting.get(doc.get("id"));
List<String> list = map.get("title");
System.out.println(list.get(0));
}
solrServer.commit();
}
}
一个复杂一点的例子
代码语言:javascript复制//复杂查询
@Test
public void querySolrJFuza()throws Exception{
//1 创建一个solrServer对象
SolrServer solrServer=new HttpSolrServer("http://192.168.36.40:8080/solr");
//2 创建一个solrquery对象
SolrQuery query=new SolrQuery();
//3 设置查询条件
query.set("q", "手机");//设置查询条件
query.setStart(0);//开始条数
query.setRows(20);//设置行数
query.set("df", "item_title");//设置默认查询域
query.setHighlight(true);//开启高亮显示
query.addHighlightField("item_title");//设置高亮显示域
query.setHighlightSimplePre("<span style='color:red'>");//高亮前缀
query.setHighlightSimplePost("</span>");//高亮显示后缀
//4 执行查询条件,执行查询 获得QueryResponse对象
QueryResponse response = solrServer.query(query);
//获取高亮显示的值
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
//5 获取文档结果总记录数
SolrDocumentList results = response.getResults();
System.err.println("查询的总记录数是:" results.getNumFound());
//6 遍历文档列表,取出域的范围
for(SolrDocument solrDocument:results){
System.out.println(solrDocument.get("id"));
String title;
//打印高亮显示的值
Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
List<String> list = map.get("item_title");
if(list!=null && list.size()>0){
title=list.get(0);
}else{
title=(String) solrDocument.get("item_title");
}
System.out.println(title);
}
}