spring-data-solr的简单使用

  1. 导入依赖
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-solr</artifactId> 
    <version>1.5.5.RELEASE</version> 
</dependency>  
<dependency> 
 	<groupId>org.springframework</groupId> 
 	<artifactId>spring-test</artifactId> 
 	<version>4.2.4.RELEASE</version> 
</dependency> 
<dependency> 
 	<groupId>junit</groupId> 
 	<artifactId>junit</artifactId> 
 	<version>4.9</version> 
</dependency> 
  1. 配置spring对solr封装的配置文件:applicationContext-solr.xml
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
 	xmlns:context="http://www.springframework.org/schema/context" 
 	xmlns:solr="http://www.springframework.org/schema/data/solr" 
 	xsi:schemaLocation="http://www.springframework.org/schema/data/solr  
    	http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd  	 	http://www.springframework.org/schema/beans  
 	 	http://www.springframework.org/schema/beans/spring-beans.xsd 
 	 	http://www.springframework.org/schema/context  
 	 	http://www.springframework.org/schema/context/spring-context.xsd"> 

 	 	
 	<!-- solr服务器地址 --> 
 	<solr:solr-server id="solrServer" url="http://192.168.25.128:8081/solr" /> 
 	
 	<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 --> 
 	<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"> 
 	 	<constructor-arg ref="solrServer" /> 
 	</bean> 
</beans> 

  1. 在需要使用solr查询的实体类中添加solr域
package com.pinyougou.pojo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.solr.core.mapping.Dynamic;

public class TbItem implements Serializable{
	
	//solr中配置的域
	@Field("id") 
    private Long id;

	@Field("item_title")
    private String title;

    private String sellPoint;

    @Field("item_price")
    private BigDecimal price;

    private Integer stockCount;

    private Integer num;

    private String barcode;

    @Field("item_image") 
    private String image;

    private Long categoryid;

    private String status;

    private Date createTime;

    @Field("item_updatetime")
    private Date updateTime;

    private String itemSn;

    private BigDecimal costPirce;

    private BigDecimal marketPrice;

    private String isDefault;

    @Field("item_goodsid")
    private Long goodsId;

    private String sellerId;

    private String cartThumbnail;

    @Field("item_category")
    private String category;

    @Field("item_brand")
    private String brand;

    private String spec;

    @Field("item_seller") 
    private String seller;
    
    //solr中配置的动态域
    @Dynamic
    @Field("item_spec_*") 
    private Map<String,String> specMap;
}

  1. 使用solr模板类进行高亮查询
public class SearchServiceImpl implements SearchService{
	
	@Autowired
	private SolrTemplate solrTemplate;
	
		/**
	 *	查询高亮集合
	 * @param searchMap
	 * @return
	 */
	private Map searchMapHighlightMap(Map searchMap) {
		Map map = new HashMap();
		//高亮显示
		HighlightQuery query = new SimpleHighlightQuery();
		//设置高亮域
		HighlightOptions highlightOptions = new HighlightOptions().addField("item_title");
		//高亮前缀
		highlightOptions.setSimplePrefix("<em style='color:red'>");
		//高亮后缀
		highlightOptions.setSimplePostfix("</em>");		
		//设置高亮选项
		query.setHighlightOptions(highlightOptions);		
		//设置查询域
		//new Criteria("item_keywords"); 要查询的域
		//searchMap.get("keywords")要查询的字段
		Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
		//添加条件
		query.addCriteria(criteria);

		//获取高亮页
		HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);
		//获取高亮入口集合
		List<HighlightEntry<TbItem>> list = page.getHighlighted();
		//循环高亮入口集合(获取每个entry)
		for (HighlightEntry<TbItem> entry : list) {
			//获取实体对象
			TbItem tbItem = entry.getEntity();
			//获取高亮列表(集合)
			List<Highlight> highlights = entry.getHighlights();
			//遍历高亮列表,获取每个高亮域
			for (Highlight highlight : highlights) {
				//获取内容数组
				List<String> snipplets = highlight.getSnipplets();
				//获取内容
				String title = snipplets.get(0);
				//设置高亮
				tbItem.setTitle(title);
			}
		}

}
  1. 分组查询
	/**
	 * 	分组查询
	 * @param searchMap
	 * @return
	 */
	private List<String> searchCategoryList(Map searchMap) {
		List<String> list = new ArrayList<String>();
		Query query = new SimpleQuery("*:*");
		//设置条件
		//new Criteria("item_keywords")  要查询的域
		//searchMap.get("keywords") 要查询的字段
		Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
		//添加条件
		query.addCriteria(criteria);
		//设置分组选项
		GroupOptions groupOptions = new GroupOptions();
		//根据item_category分组
		//where...
		groupOptions.addGroupByField("item_category");
		//添加分组选项
		query.setGroupOptions(groupOptions);
		//获取分组页
		GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query, TbItem.class);
		//根据列获取分组结果集
		//group by...
		GroupResult<TbItem> groupResult = page.getGroupResult("item_category");
		//根据结果集获取入口页
		Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();
		//循环遍历入口集合
		for (GroupEntry<TbItem> entry : groupEntries) {
			//获取分组值
			String value = entry.getGroupValue();
			//添加到集合
			list.add(value);
		}
		
		return list;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值