在e3-search-service工程中的src/test/java文件中创建TestSolrJ.java
使用SolrJ可以实现索引库的增删改查操作。solr是一个服务端,客户端要操作,必须先有一个IP与solr服务链接
1.添加文档
第一步:把solrJ的jar包添加到工程中。
第二步:创建一个SolrServer,使用HttpSolrServer创建对象。
第三步:创建一个文档对象SolrInputDocument对象。
第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。
第五步:把文档添加到索引库中。
第六步:提交。
@Test
public void addDocument() throws Exception {
//1、创建一个SolrServer对象,创建一个连接。参数solr服务的url
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr/collection1");
//2、创建一个文档对象SolrInputDocument
SolrInputDocument document = new SolrInputDocument();
//3、向文档对象中添加域。文档中必须包含一个id域,所有的域的名称必须在schema.xml中定义。
document.addField("id", "doc01");
document.addField("item_title", "测试商品01");
document.addField("item_price", 1000);
//4、把文档写入索引库
solrServer.add(document);
//5、提交
solrServer.commit();
}
2.删除文档
2.1根据id删除
第一步:创建一个SolrServer对象。
第二步:调用SolrServer对象的根据id删除的方法。
第三步:提交。
@Test
public void deleteDocument() throws Exception {
//1、创建一个SolrServer对象
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr/collection1");
//2、调用SolrServer对象的根据id删除的方法
//solrServer.deleteById("doc01");
solrServer.deleteByQuery("id:doc01");
//3、提交
solrServer.commit();
}
发现刚才添加的不见了
2.2根据查询删除
重新将开始删除文档添加回来
根据item_title删除,根据item_price等等类似
@Test
public void deleteDocumentByQuery() throws Exception {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
solrServer.deleteByQuery("item_title:测试商品");
solrServer.commit();
}
3.查询索引库
先将数据还原回来。
3.1简单查询
查询步骤:
第一步:创建一个SolrServer对象
第二步:创建一个SolrQuery对象。
第三步:向SolrQuery中添加查询条件、过滤条件。。。
第四步:执行查询。得到一个Response对象。
第五步:取查询结果。
第六步:遍历结果并打印。
@Test
public void queryIndex() throws Exception {
//1、创建一个SolrServer对象。
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr/collection1");
//2、创建一个SolrQuery对象。
SolrQuery query = new SolrQuery();
//3、设置查询条件。
//query.setQuery("*:*");
query.set("q", "*:*");
//4、执行查询,QueryResponse对象。
QueryResponse queryResponse = solrServer.query(query);
//5、取文档列表。取查询结果的总记录数
SolrDocumentList solrDocumentList = queryResponse.getResults();
System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());
//6、遍历文档列表,从取域的内容。
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("item_title"));
System.out.println(solrDocument.get("item_sell_point"));
System.out.println(solrDocument.get("item_price"));
System.out.println(solrDocument.get("item_image"));
System.out.println(solrDocument.get("item_category_name"));
}
}
3.2带高亮显示查询
@Test
public void queryIndexFuza() throws Exception {
//1、创建一个SolrServer对象
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr/collection1");
//2、建一个SolrQuery对象
SolrQuery query = new SolrQuery();
//3、向SolrQuery中添加查询条件、过滤条件。。。
query.setQuery("手机");
query.setStart(0);
query.setRows(20);
//指定默认搜索域
query.set("df", "item_title");
//开启高亮显示
query.setHighlight(true);
//高亮显示的域
query.addHighlightField("item_title");
query.setHighlightSimplePre("<em>");
query.setHighlightSimplePost("</em>");
//4、执行查询。得到一个Response对象。
QueryResponse queryResponse = solrServer.query(query);
//5、取文档列表。取查询结果的总记录数
SolrDocumentList solrDocumentList = queryResponse.getResults();
System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());
//6、遍历文档列表,从取域的内容。
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
//取高亮显示
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
String title = "";
if (list !=null && list.size() > 0 ) {
title = list.get(0);
} else {
title = (String) solrDocument.get("item_title");
}
System.out.println(title);
System.out.println(solrDocument.get("item_sell_point"));
System.out.println(solrDocument.get("item_price"));
System.out.println(solrDocument.get("item_image"));
System.out.println(solrDocument.get("item_category_name"));
}
}