学习淘淘商城第四十五课(使用SolrJ查询索引库)

110 篇文章 383 订阅
8 篇文章 0 订阅

        我们有必要在工程中写查询索引库的代码前先进行必要的测试。我们先到Solr服务页面去简单进行查询,如下图所示,在搜索条件"q"这一栏,我们输入"手机",分页参数的每页显示条数我们随便写一个数,这里我写的是3,也就是一次只查询三条数据,由于在查询条件一栏没有指定搜索域,因此默认搜索域一定要指定,否则无法查询出数据,我们在solr服务器的schema.xml文件当中配置了复制域"item_keywords",我们的默认搜索域便使用复制域"item_keywords"。我们知道在天猫或者京东,当搜索出结果后关键字是高亮显示的,我们也应该有高亮显示效果,我们点击"hl"前面的复选框就会展开如下图关于高亮显示的配置,让我们指定要高亮显示的字段以及高亮显示的html代码(在关键字前面和后面都有,比如<em>手机</em>)。点击"Execute Query"按钮便可以查询到如下图右侧的数据,上面是查询出来的商品列表信息,下面是高亮信息"highlighting"。

        大家应该注意到下图高亮数据部分有一条查询结果是空的("143771131488369":{}),这是因为这条数据的item_title字段是"121"并没有关键字"手机",但是在商品

分类中有"手机",于是认为该商品也符合搜索条件(复制域的意思是把各个字段的值都复制到"item_keywords"当中,查询的时候,

只要满足其中一个字段的条件便认为是满足条件),但由于"item_title"字段没有"手机",

因此显示的高亮结果是"143771131488369":{}


          针对上面的查询条件,我们使用java测试代码来跑一遍,代码如下所示。

@Test
	public void queryDocument() throws Exception{
		//创建一个SolrServer对象,创建一个HttpSolrServer对象,需要指定solr服务的url
		SolrServer solrServer = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
		//创建一个SolrQuery对象
		SolrQuery query = new SolrQuery();
		//设置查询条件、过滤条件、分页条件、排序条件、高亮
		//query.set("q", "*:*");
		query.setQuery("手机");
		//分页条件
		query.setStart(0);
		query.setRows(3);
		//设置默认搜索域
		query.set("df", "item_keywords");
		//设置高亮
		query.setHighlight(true);
		//高亮显示的域
		query.addHighlightField("item_title");
		query.setHighlightSimplePre("<em>");
		query.setHighlightSimplePost("</em>");
		//执行查询,得到一个Response对象
		QueryResponse response = solrServer.query(query);
		//取查询结果
		SolrDocumentList solrDocumentList = response.getResults();
		//取查询结果总记录数
		System.out.println("查询结果总记录数:"+solrDocumentList.getNumFound());
		for(SolrDocument document : solrDocumentList){
			System.out.println(document.getFieldValue("id"));
			//取高亮显示
			Map<String,Map<String,List<String>>> highlighting = response.getHighlighting();
			List<String> list = highlighting.get(document.getFieldValue("id")).get("item_title");
			String itemTitle = "";
			if(list != null && list.size() > 0){
				itemTitle = list.get(0);
			}else {
				itemTitle = (String)document.get("item_title");
			}
			System.out.println(itemTitle);
			System.out.println(document.get("item_sell_point"));
			System.out.println(document.get("item_price"));
			System.out.println(document.get("item_image"));
			System.out.println(document.get("item_category_name"));
			System.out.println("===============================================");
		}
	}

            测试代码执行的结果如下图所示。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值