Solr&SpringdataSolr小结

323 阅读1分钟

Solr搜索引擎

中文分词器 IK Analyzer
  • IK Analyzer配置
  1. IKAnalyzer*.jar添加到solr工程的lib目录
  2. 将扩展字典,停用词字典,配置文件放到WEB-INF/classes下
  3. 为Solrhome的schema.xml 文件配置FieldType
  • 配置域 域相当于数据库的表字段,存放数据前,需要定义相关的Field,在schema.xml中
  1. name
  2. type
  3. indexed
  4. stored
  5. required 是否必须
  6. multiValued 是否多值 //复制域 //动态域 某些未来需要扩充的字段,比如规格 4G 5G ....

SpringDataSolr

1. applicationContext-solr.xml
  1. @Field 注解 public class TbItem implements Serializable{

    	@Field
        private Long id;
    
    	@Field("item_title")
        private String title;
        
    	....
    
  2. 增加

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations="classpath:applicationContext-solr.xml")
    public class TestTemplate {
    	@Autowired
    	private SolrTemplate solrTemplate;
    	@Test
    	public void testAdd(){
    		TbItem item=new TbItem();
    		item.setId(1L);
    		item.setBrand("华为");
            ...
            solrTemplate.savaBean(item);
            solrTemplate.commit();
    
  3. 按主键查询/删除

    //查询
    TbItem item = solrTemplate.getById(1, TbItem.class);
    //删除
    solrTemplate.deleteById("1");
    solrTemplate.commit();
    //全部删除
    Query query=new SimpleQuery("*:*");
    solrTemplate.delete(query);
    solrTemplate.commit();
    
  4. 分页查询

    public void testPageQuery(){
    		Query query=new SimpleQuery("*:*");
    		query.setOffset(20);//开始索引(默认0)
    		query.setRows(20);//每页记录数(默认10)
    		ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
    		System.out.println("总记录数:"+page.getTotalElements());
    		List<TbItem> list = page.getContent();
    		showList(list);}
    private void showList(List<TbItem> list){		
    		for(TbItem item:list){
    			System.out.println(item.getTitle() +item.getPrice());}}
    
  5. 条件查询

    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);
    		ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
    		System.out.println("总记录数:"+page.getTotalElements());
    		List<TbItem> list = page.getContent();
    		showList(list);}