Solr(二)——Java使用solr全文搜索

使用SolrJ可以实现索引库的增删改查操作。



一.添加

第一步:把solrJ的jar包添加到工程中。
第二步:创建一个SolrServer,使用HttpSolrServer创建对象。
第三步:创建一个文档对象SolrInputDocument对象。
第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。
第五步:把文档添加到索引库中。
第六步:提交。

@Test
	public void addDocument() throws Exception {
		// 第一步:把solrJ的jar包添加到工程中。
		// 第二步:创建一个SolrServer,使用HttpSolrServer创建对象。
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
		// 第三步:创建一个文档对象SolrInputDocument对象。
		SolrInputDocument document = new SolrInputDocument();
		// 第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。
		document.addField("id", "test001");
		document.addField("item_title", "测试商品");
		document.addField("item_price", "199");
		// 第五步:把文档添加到索引库中。
		solrServer.add(document);
		// 第六步:提交。
		solrServer.commit();
	}


二.根据id删除

第一步:创建一个SolrServer对象。

第二步:调用SolrServer对象的根据id删除的方法。

第三步:提交。

@Test
	public void deleteDocumentById() throws Exception {
		// 第一步:创建一个SolrServer对象。
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
		// 第二步:调用SolrServer对象的根据id删除的方法。
		solrServer.deleteById("1");
		// 第三步:提交。
		solrServer.commit();
	}


三.根据查询删除

@Test
	public void deleteDocumentByQuery() throws Exception {
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
		solrServer.deleteByQuery("title:change.me");
		solrServer.commit();
	}

四.查询索引库

第一步:创建一个SolrServer对象
第二步:创建一个SolrQuery对象。
第三步:向SolrQuery中添加查询条件、过滤条件。。。
第四步:执行查询。得到一个Response对象。
第五步:取查询结果。
第六步:遍历结果并打印。

4.1简单查询

@Test
	public void queryDocument() throws Exception {
		// 第一步:创建一个SolrServer对象
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
		// 第二步:创建一个SolrQuery对象。
		SolrQuery query = new SolrQuery();
		// 第三步:向SolrQuery中添加查询条件、过滤条件。。。
		query.setQuery("*:*");
		// 第四步:执行查询。得到一个Response对象。
		QueryResponse response = solrServer.query(query);
		// 第五步:取查询结果。
		SolrDocumentList solrDocumentList = response.getResults();
		System.out.println("查询结果的总记录数:" + solrDocumentList.getNumFound());
		// 第六步:遍历结果并打印。
		for (SolrDocument solrDocument : solrDocumentList) {
			System.out.println(solrDocument.get("id"));
			System.out.println(solrDocument.get("item_title"));
			System.out.println(solrDocument.get("item_price"));
		}
	}


4.2带高亮显示

@Test
	public void queryDocumentWithHighLighting() throws Exception {
		// 第一步:创建一个SolrServer对象
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
		// 第二步:创建一个SolrQuery对象。
		SolrQuery query = new SolrQuery();
		// 第三步:向SolrQuery中添加查询条件、过滤条件。。。
		query.setQuery("测试");
		//指定默认搜索域
		query.set("df", "item_keywords");
		//开启高亮显示
		query.setHighlight(true);
		//高亮显示的域
		query.addHighlightField("item_title");
		query.setHighlightSimplePre("");
		query.setHighlightSimplePost("");
		// 第四步:执行查询。得到一个Response对象。
		QueryResponse response = solrServer.query(query);
		// 第五步:取查询结果。
		SolrDocumentList solrDocumentList = response.getResults();
		System.out.println("查询结果的总记录数:" + solrDocumentList.getNumFound());
		// 第六步:遍历结果并打印。
		for (SolrDocument solrDocument : solrDocumentList) {
			System.out.println(solrDocument.get("id"));
			//取高亮显示
			Map>> highlighting = response.getHighlighting();
			List list = highlighting.get(solrDocument.get("id")).get("item_title");
			String itemTitle = null;
			if (list != null && list.size() > 0) {
				itemTitle = list.get(0);
			} else {
				itemTitle = (String) solrDocument.get("item_title");
			}
			System.out.println(itemTitle);
			System.out.println(solrDocument.get("item_price"));
		}
	}

五.数据导入到索引库中

5.1创建对应数据集的pojo

public class SearchItem implements Serializable{
	private String id;
	private String title;
	private String sell_point;
	private long price;
	private String image;
	private String category_name;
}


5.2代码实现

/**
 * 将商品数据导入索引库
 * 

Title: SearchItemServiceImpl

*

Description:

*

Company: www.itcast.cn

* @version 1.0 */ @Service public class SearchItemServiceImpl implements SearchItemService { @Autowired private ItemMapper itemMapper; @Autowired private SolrServer solrServer; @Override public E3Result importItmes() { try { //查询商品列表 List itemList = itemMapper.getItemList(); //导入索引库 for (SearchItem searchItem : itemList) { //创建文档对象 SolrInputDocument document = new SolrInputDocument(); //向文档中添加域 document.addField("id", searchItem.getId()); document.addField("item_title", searchItem.getTitle()); document.addField("item_sell_point", searchItem.getSell_point()); document.addField("item_price", searchItem.getPrice()); document.addField("item_image", searchItem.getImage()); document.addField("item_category_name", searchItem.getCategory_name()); //写入索引库 solrServer.add(document); } //提交 solrServer.commit(); //返回成功 return E3Result.ok(); } catch (Exception e) { e.printStackTrace(); return E3Result.build(500, "商品导入失败"); } } }


5.3SolrServer的配置

实现类中引入的SolrServer的配置



	
		
	




你可能感兴趣的:(Solr)