1、什么是SolrJ
solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:
2、依赖jar包
3、添加文档
3.1实现步骤
第一步:创建一个java工程
第二步:导入jar包。包括solrJ的jar包。还需要
第三步:和Solr服务器建立连接。HttpSolrServer对象建立连接。
第四步:创建一个SolrInputDocument对象,然后添加域。
第五步:将SolrInputDocument添加到索引库。
第六步:提交。
3.2 代码实现
@Test
public void addDocument() throws Exception {
//和solr服务器创建连接
//参数:solr服务器的地址
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
//向文档中添加域
//第一个参数:域的名称,域的名称必须是在schema.xml中定义的
//第二个参数:域的值
document.addField("id", "c0001");
document.addField("title_ik", "使用solrJ添加的文档");
document.addField("content_ik", "文档的内容");
document.addField("product_name", "商品名称");
//把document对象添加到索引库中
solrServer.add(document);
//提交修改
solrServer.commit();
}
4、删除文档
4.1 根据id或者查询删除
@Test
public void testIndexDel() throws Exception{
//创建和Solr服务端连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//根据主键id进行删除
//solrServer.deleteById("a001");
//根据查询删除,这里是删除所有*:*
solrServer.deleteByQuery("*:*");
//提交
solrServer.commit();
}
5、查询文档
5.1 简单查询
@Test
public void testIndexSearch1() throws Exception{
//连接solr服务端
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建solr查询条件对象
SolrQuery solrQuery = new SolrQuery();
//查询所有
solrQuery.setQuery("*:*");
//查询并获取查询响应对象
QueryResponse queryResponse = solrServer.query(solrQuery);
//从查询响应中获取查询结果集对象
SolrDocumentList results = queryResponse.getResults();
//打印一共查询到多少条记录,也就是记录总数
System.out.println("=====count====" + results.getNumFound());
//遍历查询结果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
}
5.2 复杂查询
@Test
public void testIndexSearch2() throws Exception{
//连接solr服务端
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建solr查询条件对象
SolrQuery solrQuery = new SolrQuery();
//查询关键字输入
solrQuery.setQuery("台灯");
//设置默认搜索域
solrQuery.set("df", "product_keywords");
//设置过滤查询
solrQuery.addFilterQuery("product_price:[1 TO 100]");
//设置排序,这里是降序
solrQuery.setSort("product_price", ORDER.desc);
//=======设置分页========
//设置起始条数
solrQuery.setStart(0);
//设置查询多少条
solrQuery.setRows(50);
//========设置高亮显示=======
//高亮默认是关闭的,所以要手动开启
solrQuery.setHighlight(true);
//设置需要高亮显示的域
solrQuery.addHighlightField("product_name");
//设置高亮前缀
solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
//设置高亮后缀
solrQuery.setHighlightSimplePost("</span>");
//===================查询并获取查询响应对象=====================================
QueryResponse queryResponse = solrServer.query(solrQuery);
//从查询响应中获取查询结果集对象
SolrDocumentList results = queryResponse.getResults();
//打印一共查询到多少条记录,也就是记录总数
System.out.println("=====count====" + results.getNumFound());
//遍历查询结果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
//获取高亮
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<String> list = highlighting.get(doc.get("id")).get("product_name");
if(list != null && list.size() > 0){
String hlName = list.get(0);
System.out.println("=======high lighting=====" + hlName);
}
System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
}