干货 | SpringDataSolr的入门

Solr和SpringDataSolr的关系

solr 作为一个企业及应用,可以理解为一个搜索引擎的大体上的成品。solr的使用 是通过它提供的若干接口,而Spring Data Solr 是spring 调用solr接口的 进一步封装,简化了solr的使用,可以通过spring-data-solr提供的对象 HttpSolrServer 对文档索引的创建、搜索、分组、排序、分页等等进行操控。功能还是较为完善的。

准备工作和测试

第一步:配置solr服务的域

在你的solr服务所对应的本地库中,找到schema.xml的添加如下域


      
      
      
      
      
      
      
 
      
      
      
      
      
 
      

第二步:引入相关的依赖和JDK插件


       
           org.springframework.data
           spring-data-solr
           1.5.5.RELEASE
       
 
       
           org.springframework
           spring-test
           4.2.4.RELEASE
       
 
       
           junit
           junit
           4.9
       
 
   
 
   
 
       
           
           
               org.apache.maven.plugins
               maven-compiler-plugin
               3.7.0
               
                   1.8
                   1.8
                   UTF-8
               
           
 
       
 
   

第三步:创建实体和编写属性相关的字段映射
自行提供setter和getter方法

public class TbItem implements Serializable {
 
    @Field
    private Long id;
 
    @Field("item_title")
    private String title;
 
    @Field("item_price")
    private BigDecimal price;
 
    @Field("item_image")
    private String image;
 
    @Field("item_goodsid")
    private Long goodsId;
 
    @Field("item_category")
    private String category;
 
    @Field("item_brand")
    private String brand;
 
    @Field("item_seller")
    private String seller;
 
}

第四步:编写applicationContext-solr.xml



 
    
    
 
    
    
 
    
    
 
        
 
    

第五步:进行Solr的集成测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-solr.xml")
public class SpringDataSolrTest {
 
    @Autowired
    private SolrTemplate solrTemplate;
 
    //集成测试对应的单元
}

在对应的集成测试单元处编写测试方法

1、添加单个对象到solr

/**
 * 添加单个对象到solr
 */
 
@Test
public void beanAddSolr(){
 
    TbItem item=new TbItem();
 
    item.setId(1L);
 
    item.setBrand("华为");
 
    item.setCategory("手机");
 
    item.setGoodsId(1L);
 
    item.setSeller("华为2号专卖店");
 
    item.setTitle("华为Mate9");
 
    item.setPrice(new BigDecimal(2000));
 
    solrTemplate.saveBean(item);
 
    solrTemplate.commit();
}

2、根据主键查询

/**
 * 根据主键查询
 */
 
@Test
public void findSolrById(){
 
    TbItem item = solrTemplate.getById(1, TbItem.class);
 
    System.out.println(item.getTitle());
}

3、根据主键删除

/**
   * 根据主键删除
   */
 
  @Test
  public void deleteSolrById(){
 
      UpdateResponse response = solrTemplate.deleteById("1");
 
      solrTemplate.commit();
  }

4、批量导入索引

/**
 * 将List集合中的对象添加到solr中
 */
 
@Test
public void beanListAddSolr(){
 
    List list=new ArrayList();
 
    for(int i=0;i<100;i++){
 
        TbItem item=new TbItem();
 
        item.setId(i+1L);
 
        item.setBrand("华为");
 
        item.setCategory("手机");
 
        item.setGoodsId(1L);
 
        item.setSeller("华为2号专卖店");
 
        item.setTitle("华为Mate"+i);
 
        item.setPrice(new BigDecimal(2000+i));
 
        list.add(item);
    }
 
    solrTemplate.saveBeans(list);
 
    solrTemplate.commit();
}

5、分页查询

/**
 * 分页查询
 */
 
@Test
public void testPageQuery(){
 
    Query query=new SimpleQuery("*:*");
 
    //开始索引(默认0)
    query.setOffset(1);
 
    //每页记录数(默认10)
    query.setRows(20);
 
    ScoredPage page = solrTemplate.queryForPage(query, TbItem.class);
 
    System.out.println("总记录数:"+page.getTotalElements());
 
    List list = page.getContent();
 
    showList(list);
}
 
//显示记录数据
private void showList(List list){
 
    for(TbItem 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, TbItem.class);
 
    System.out.println("总记录数:"+page.getTotalElements());
 
    List list = page.getContent();
 
    showList(list);
}

6、高亮查询

@Test
    public void queryPageAndHightFromSolr(){
 
//        Query query=new SimpleQuery("item_title:手机");
 
        SimpleHighlightQuery query = new SimpleHighlightQuery();
 
        //开始索引(默认0)
        query.setOffset(1);
 
        //每页记录数(默认10)
        query.setRows(20);
 
 
        //设置高亮的域
        HighlightOptions highlightOptions = new HighlightOptions().addField("item_title").addField("item_category");
 
 
        //高亮前缀
        highlightOptions.setSimplePrefix("");
 
        //高亮后缀
        highlightOptions.setSimplePostfix("");
 
        //设置高亮选项
        query.setHighlightOptions(highlightOptions);
 
 
        //添加查询条件
        Criteria criteria = new Criteria("item_keywords").is("手机");
 
        query.addCriteria(criteria);
 
        HighlightPage items = solrTemplate.queryForHighlightPage(query, TbItem.class);
 
        List> highlighted = items.getHighlighted();
 
        for (HighlightEntry temHighlightEntry : highlighted) {
 
            List highlights = temHighlightEntry.getHighlights();
 
 
            TbItem item = temHighlightEntry.getEntity();
 
            for (HighlightEntry.Highlight highlight : highlights) {
 
                List snipplets = highlight.getSnipplets();
 
 
                Field field = highlight.getField();
 
                String name = field.getName();
 
                for (String snipplet : snipplets) {
 
                    if ("item_title".equals(name)) {
 
                        item.setTitle(snipplet);
                    }
 
                    if ("item_category".equals(name)) {
 
                        item.setCategory(snipplet);
                    }
//                    System.out.println("snipplet = " + snipplet);
                }
            }
 
 
        }
 
        
 
 
        for (TbItem item : items) {
 
            System.out.println(item.getTitle());
 
            System.out.println("------------------------------");
 
            System.out.println(item.getCategory());
        }
         
 
    }

7、清空索引

/**
 * 删除solr全部数据
 */
 
@Test
public void deleteAllSolr(){
 
    Query query=new SimpleQuery("*:*");
 
    solrTemplate.delete(query);
 
    solrTemplate.commit();
}

————————————

推荐阅读:

2019版大数据学习路线图(含大纲+视频+工具+书籍+面试)

2019年黑马新版C/C++学习路线图(内含大纲+视频+工具+书籍+面试)

2018年新版Java学习路线图(内含大纲+视频+工具+书籍+面试)

2018年最新Python学习路线图(内含大纲+视频+工具)

2018版Go语言+区块链学习路线图(含大纲+视频+工具+资料)

2018新版前端与移动开发学习路线图(视频+工具+书籍+资源)

你可能感兴趣的:(干货 | SpringDataSolr的入门)