Solr-项目中的使用

配置中文分析器

在SolrCore的conf下的schema.xml是Solr数据表配置文件,定义了加入索引的数据的数据类型。
主要包括Fields,FieldTypes和其他的一些设置。
	
    
      
    

	
   
   

   
   
   
   
   
   

   
   
   
FieldType:定义字段的类型
Field:定义字段,type分析类型,indexed是否索引,stored是否存储。
uniqueKey:Solr默认定义唯一主键key为id域。
copyField:复制域,将多个Field复制到一个Field中,以便于统一的检索。

以上 为实例业务系统的Field。

批量导入数据

使用dataimport:
1、位置2个jar在solr目录的dist目录下
2、将此2jar包,放入solrCore的lib扩展目录下,再加上数据库的驱动mysql
3、在SolrCore的conf下的solrconfig.xml中,添加:
   
    
      data-config.xml
     
   
4、SolrCore的conf下创建一个文件:data-config.xml:
  
   
   
   
	
		  
		  
		  
		  
		  
		  
	   
   

5、启动服务器,访问Solr服务器的core,进行对数据库索引导入。

导入数据前,会先清空索引库,然后再导入。


工程搭建:

导入jar:
1、springmvc的相关jar包
2、SolrJ的jar包和solrJ的依赖包
3、solr目录下example/lib/ext中的入职相关。

Web.xml:
POST乱码过滤器、前端控制器

SpringMVC.xml:
包扫描器、注解驱动、视图解析器,再加上:
		
			
		


Dao:
	private @Autowired SolrServer solrServer;

	public SearchResult search(SolrQuery query) throws Exception{
		SearchResult result = new SearchResult();
		// 查询结果
		QueryResponse response = solrServer.query(query);
		SolrDocumentList results = response.getResults();	// 结果集
		Map>> highlighting = response.getHighlighting();//高亮结果集
		
		List list = new ArrayList<>();
		// 遍历查询结果
		for (SolrDocument doc : results) {
			Product pro = new Product();
			pro.setPid((String) doc.get("id"));
			
			String name = "";
			List list2 = highlighting.get(doc.get("id")).get("product_name");
			if(list2 != null && list2.size() > 0){
				name = list2.get(0);
			}else{
				name = (String) doc.get("product_name");
			}
			
			pro.setName(name);
			pro.setCatalog_name((String) doc.get("product_catalog_name"));
			pro.setPicture((String) doc.get("product_picture"));
			pro.setPrice((float) doc.get("product_price"));
			list.add(pro);
		}
		
		result.setPruductList(list);	// 商品列表
		result.setTotalCount(results.getNumFound());	// 总记录数
		return result;
	}



Service:
	private @Autowired SearchDao searchDao;
	
	public SearchResult search(String queryString,String catalog_name,String price,Integer sort,Integer page) throws Exception {
		SolrQuery query = new SolrQuery();
		// 设置 主查询条件
		if(queryString != null && queryString != ""){
			query.setQuery(queryString);
		}else {
			query.setQuery("*:*");
		}
		//设置过滤条件
		if(catalog_name != null && catalog_name != ""){
			query.addFilterQuery("product_catalog_name:" + catalog_name);
		}
		// 价格区间
		if(price != null && price != ""){
			String[] split = price.split("-");
			query.addFilterQuery("product_price:["+split[0]+" TO "+split[1]+"]");
		}
		// 排序条件
		if(sort != null && sort == 1){
			query.setSort("product_price", ORDER.desc);
		}else {
			query.setSort("product_price", ORDER.asc);
		}
		// 分页
		if( page == null || page < 1) {
			page = 1;
		}
		// 起始	固定每页10条
		int start = (page -1 ) * 10;
		query.setStart(start);
		query.setRows(10);
		// 设置 默认搜索域
		query.set("df", "product_keywords");
		// 高亮显示
		query.setHighlight(true);
		query.addHighlightField("product_name");
		query.setHighlightSimplePre("");
		query.setHighlightSimplePost("");
		
		// 查询 商品列表
		SearchResult result = searchDao.search(query);
		
		Long totalCount = result.getTotalCount();
		int page1 = (int) (totalCount/query.getRows());
		if(totalCount % query.getRows() > 0){ page1 ++; }
		
		result.setPageCount(page1);
		result.setPagesize(query.getRows());
		
		return result;
	}



Controller:
	private @Autowired SearchService searchService;
	
	@RequestMapping("search")
	public String search(String queryString,String catalog_name,String price,Integer sort,@RequestParam(defaultValue="1")Integer page,Model model) throws Exception {
		
		SearchResult result = searchService.search(queryString, catalog_name, price, sort, page);
		// 
		model.addAttribute("result", result);
		// 
		model.addAttribute("queryString", queryString);
		model.addAttribute("catalog_name", catalog_name);
		model.addAttribute("price", price);
		model.addAttribute("sort", sort);
		if(page < 1 ){
			page = 1;
		}
		model.addAttribute("page", page);
		
		return "product_list";
	}




以上是对Solr服务器的简单使用……

你可能感兴趣的:(Java服务端)