具体的用法在代码中有注释,这边就不在累述了。
代码语言:javascript复制public class SolrjTest {
//添加,修改
@Test
public void test1() throws IOException, SolrServerException {
//和solr服务器创建连接,参数为solr服务器地址
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr");
//创建一个文档对象
SolrInputDocument input = new SolrInputDocument();
//向文档对象添加Field域
//第一个参数:域的名称,域的名称必须是在schema.xml中定义的
//第二个参数:域的值
input.addField("id",10001);
input.addField("item_title","测试新增内容111");
input.addField("item_sell_point","买一送一");
input.addField("item_price",100000);
input.addField("item_image","");
input.addField("item_category_name","新增");
input.addField("item_desc","新增测试");
//SolrInputDocument 添加到索引库中
//solrj 没有提供update方法,如果想要更新数据同样用add,add 方法其实就是先删除,后insert
//只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加。
solrServer.add(input);
//提交修改
solrServer.commit();
}
//删除
@Test
public void test2() throws IOException, SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr");
//根据 id 删除文档
solrServer.deleteById("10001");
solrServer.commit();
}
//删除
@Test
public void test3() throws IOException, SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//根据查询删除索引,删除所有
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
//查询
@Test
public void test4() throws IOException, SolrServerException {
//指定连接collection1,相当于mysql的库
//一个collection就是一个solrCore即solr的实例
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
SolrQuery solrParams = new SolrQuery();
// q - 查询字符串,必须的,如果查询所有使用*:*。
// solrParams.set("q","item_title:测试新增内容");
//查看源码得知,相当于 solrParams.set("q","测试新增内容");
//CommonParams中可以查看对应的前缀参数
solrParams.setQuery("测试新增内容");
// df-指定一个搜索Field
solrParams.set("df","item_title");
//fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的
//item_price 在 1-1000000 之间,用 * 表示无限
//item_price:[100 TO *] 表示,item_price 大于 100
//也可写成 solrParams.setFilterQueries("item_price:[1 TO 1000000]");
solrParams.set("fq","item_price:[1 TO 1000000]");
//sort - 排序
//也可写成 solrParams.setSort("item_price", SolrQuery.ORDER.asc);
solrParams.set("sort"," item_price desc");
//start - 分页显示使用,开始记录下标,从0开始
//solrParams.setStart(0);
solrParams.set("start",0);
//rows - 指定返回结果最多有多少条记录,配合start来实现分页。
//solrParams.setRows(2);
solrParams.set("rows",2);
//fl - 指定返回那些字段内容,用逗号或空格分隔多个
// 执行查询,只会返回 id,item_title,item_price
//相当于 solrParams.setFields("id,item_title,item_price");
solrParams.set("fl","id,item_title,item_price");
//设置高亮
solrParams.setHighlight(true);
//设置高亮的字段
solrParams.addHighlightField("item_title");
//设置高亮前缀
solrParams.setHighlightSimplePre("<em>");
//设置高亮后缀
solrParams.setHighlightSimplePost("</em>");
QueryResponse response = solrServer.query(solrParams);
SolrDocumentList results = response.getResults();
//取高亮
Map<String, Map<String, List<String>>> highlightingMap = response.getHighlighting();
//跟是否分页的设置无关,返回的是总的记录数
System.out.println("总的查询数量:" results.getNumFound());
for(SolrDocument solrDocument:results){
System.out.println("id:" solrDocument.get("id"));
System.out.println("item_sell_point:" solrDocument.get("item_sell_point"));
System.out.println("item_price:" solrDocument.get("item_price"));
System.out.println("item_category_name:" solrDocument.get("item_category_name"));
//取高亮
Map<String, List<String>> map = highlightingMap.get(solrDocument.get("id"));
List<String> list = map.get("item_title");
if(list!=null && list.size()>0){
System.out.println("item_title:" list.get(0));
}else{
System.out.println("item_title:" solrDocument.get("item_title"));
}
System.out.println("==============================");
}
}
}