SpringDataSolr --- 入门简介

一、Solr概述

Solr参考:http://blog.csdn.net/ka_ka314/article/details/79369502

 

二、SpringDataSolr概述

Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。

 

三、SpringDataSolr快速入门

1、Maven pom配置

 


        
            org.springframework.data
            spring-data-solr
            1.5.5.RELEASE
        
        
            org.springframework
            spring-test
            4.2.4.RELEASE
        
        
            junit
            junit
            4.9
        
    


2、application-solr.xml配置

 



    
    
    
    
        
    


3、SpringDataSolr Test

 

 

 

package com.springDataSolr.test;

import com.springDataSolr.pojo.Item;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-solr.xml")
public class TestTemplate {

    @Autowired
    private SolrTemplate solrTemplate;
    /**
     *  增加、修改
     */
    @Test
    public void testAdd(){
        Item item=new Item();
        item.setId(1L);
        item.setBrand("华为");
        item.setCategory("手机");
        item.setGoodsId(1L);
        item.setSeller("华为专卖店");
        item.setTitle("华为Mate9");
        item.setPrice(new BigDecimal(2000.00));
        System.out.println(item.getPrice());
        solrTemplate.saveBean(item);
        solrTemplate.commit();
    }
    /**
     * 根据ID查询
     */
    @Test
    public void testFindOneById(){
        Item item = solrTemplate.getById(1, Item.class);
        System.out.println(item.getTitle());
    }
    /**
     * 根据ID删除
     */
    @Test
    public void testDeleteById(){
        solrTemplate.deleteById("1");
        solrTemplate.commit();
    }
    /**
     * 批量增加
     */
    @Test
    public void testAddList(){
        List list=new ArrayList();

        for(int i=0;i<100;i++){
            Item item=new Item();
            item.setId(i+1L);
            item.setBrand("华为");
            item.setCategory("手机");
            item.setGoodsId(1L);
            item.setSeller("华为专卖店");
            item.setTitle("华为Mate"+i);
            item.setPrice(new BigDecimal(2000+i));
            list.add(item);
        }

        solrTemplate.saveBeans(list);
        solrTemplate.commit();
    }
    /**
     * 分页查询
     */
    @Test
    public void testPageQuery(){
        Query query=new SimpleQuery("item_price:*");
        query.setOffset(20);//开始索引(默认0)
        query.setRows(20);//每页记录数(默认10)
        ScoredPage page = solrTemplate.queryForPage(query, Item.class);
        System.out.println("总记录数:"+page.getTotalElements());
        System.out.println("总页数:" + page.getTotalPages());
        List list = page.getContent();
        showList(list);
    }
    //显示记录数据
    private void showList(List list){
        for(Item item:list){
            System.out.println(item.getTitle() + " " +item.getPrice());
        }
    }
    /**
     * 条件查询
     */
    @Test
    public void testPageQueryMutil(){
        Query query=new SimpleQuery("*:*");
        Criteria criteria=new Criteria("item_title").contains("2");
        criteria=criteria.and("item_title").contains("5");
        query.addCriteria(criteria);
        //query.setOffset(20);//开始索引(默认0)
        //query.setRows(20);//每页记录数(默认10)
        ScoredPage page = solrTemplate.queryForPage(query, Item.class);
        System.out.println("总记录数:"+page.getTotalElements());
        List list = page.getContent();
        showList(list);
    }
    /**
     * 删除所有
     */
    @Test
    public void testDeleteAll(){
        Query query=new SimpleQuery("item_title:*");
        solrTemplate.delete(query);
        solrTemplate.commit();
    }
}

 

四、高亮显示

 

	/**
	 * 根据关键字搜索列表
	 * @param keywords
	 * @return
	 */
	private Map searchList(Map searchMap){
		Map map=new HashMap();
		HighlightQuery query=new SimpleHighlightQuery();
		HighlightOptions highlightOptions=new HighlightOptions().addField("item_title");//设置高亮的域
		highlightOptions.setSimplePrefix("");//高亮前缀 
		highlightOptions.setSimplePostfix("");//高亮后缀
		query.setHighlightOptions(highlightOptions);//设置高亮选项
		//按照关键字查询
		Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
		query.addCriteria(criteria);
		HighlightPage page = solrTemplate.queryForHighlightPage(query, TbItem.class);
		for(HighlightEntry h: page.getHighlighted()){//循环高亮入口集合
			
			/*TbItem item = h.getEntity();//获取原实体类			
			if(h.getHighlights().size()>0 && h.getHighlights().get(0).getSnipplets().size()>0){
				item.setTitle(h.getHighlights().get(0).getSnipplets().get(0));//设置高亮的结果
			}*/
			
			//获取高亮列表(高亮域的个数)
			List highlightList = h.getHighlights();
            for(Highlight h1:highlightList){
				List sns = h1.getSnipplets();// 每个域有可能存储多值
				System.out.println(sns);
			}
		}		
		map.put("rows",page.getContent());
		return map;
	}


五、分组查询

 

 

/**
	 * 查询分类列表  
	 * @param searchMap
	 * @return
	 */
	private  List searchCategoryList(Map searchMap){
		List list=new ArrayList();	
		Query query=new SimpleQuery();		
		//按照关键字查询
		Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
		query.addCriteria(criteria);
		//设置分组选项
		GroupOptions groupOptions=new GroupOptions().addGroupByField("item_category");
		query.setGroupOptions(groupOptions);
		//得到分组页
		GroupPage page = solrTemplate.queryForGroupPage(query, TbItem.class);
		//根据列得到分组结果集
		GroupResult groupResult = page.getGroupResult("item_category");
		//得到分组结果入口页
		Page> groupEntries = groupResult.getGroupEntries();
		//得到分组入口集合
		List> content = groupEntries.getContent();
		for(GroupEntry entry:content){
			list.add(entry.getGroupValue());//将分组结果的名称封装到返回值中	
		}
		return list;
	}

 

 

 

你可能感兴趣的:(Java,------,Solr)