Lucene实现京东搜索(八)

一、原型分析

Lucene实现京东搜索(八)_第1张图片

二、系统架构

Lucene实现京东搜索(八)_第2张图片

三、工程搭建

1. 创建一个web工程导入jar包
Lucene实现京东搜索(八)_第3张图片

2. springmvc-web.xml配置文件



	
		
	
	
	
	
	
	

	
		
		
		
	


3. web.xml配置文件


  JDlucene
  
		contextConfigLocation
		classpath:spring/applicationContext.xml
  
  
  
  		org.springframework.web.context.ContextLoaderListener
  
  
  
 	
		CharacterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			utf-8
		
		        
            forceEncoding        
            true    
            
	
	
		CharacterEncodingFilter
		/*
	

  
		springmvc
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:spring/springmvc-web.xml
		
  
  
  
		springmvc
		/
  
  

4. applicationContext.xml配置文件

  


	
		
	
	
	
	
	
		
		
		
		
		
		
	
	
	
		
		
	
	
	
		
		
	
	
	  
          
     
    
     

四、Dao层

1. BaseDao
package com.npf.dao.base;

import java.io.Serializable;
import java.util.List;

public interface BaseDao {
     
	public List selectAllEntity();
	
	public T getEntityByKey(PK key);
	
	public void createEntity(T entity);
	
	public void updateEntity(T entity);
	
	public void deleteEntity(T entity);

 
}

五、Service层

功能:接收action传递过来的参数,根据参数拼装一个查询条件,调用dao层方法,查询商品列表。接收返回的商品列表和商品的总数量,根据每页显示的商品数量计算总页数。
参数:
1、查询条件:字符串
2、商品分类的过滤条件:商品的分类名称,字符串
3、商品价格区间:传递一个字符串,满足格式:“0-100、101-200、201-*”
4、排序条件:页面传递过来一个升序或者降序就可以,默认是价格排序。0:升序1:降序
5、分页信息:每页显示的记录条数创建一个常量8条,传递一个当前页码就可以了。
业务逻辑
1、根据参数创建查询对象。
2、调用dao执行查询。
3、根据总记录数计算总页数。
返回值:ResultModel 
package com.npf.service.product;

import com.npf.entity.QueryVo;
import com.npf.entity.ResultModel;

public interface ProductService {

	public ResultModel getProductList(QueryVo queryVo) throws Exception;
	
	public void createIndexDump() throws Exception;
}

六、Controller层

功能:接收页面传递过来的参数调用service查询商品列表。将查询结果返回给jsp页面,还需要查询参数的回显。
参数:
1、查询条件:字符串
2、商品分类的过滤条件:商品的分类名称,字符串
3、商品价格区间:传递一个字符串,满足格式:“0-100、101-200、201-*”
4、排序条件:页面传递过来一个升序或者降序就可以,默认是价格排序。0:升序1:降序
5、分页信息:每页显示的记录条数创建一个常量60条。传递一个当前页码就可以了。
6、Model:相当于request。
返回结果:String类型,就是一个jsp的名称。
package com.npf.controller.product;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.npf.entity.QueryVo;
import com.npf.entity.ResultModel;
import com.npf.service.product.ProductService;

@Controller
public class ProductController {

	@Autowired
	private ProductService productService;

	@RequestMapping("/list")
	public String showList(QueryVo queryVo, Model model) throws Exception{
		queryVo.setPage(queryVo.getPage() == 0 ? 1 : queryVo.getPage());
		queryVo.setCatalog_name(queryVo.getCatalog_name() == null ? 
				"幽默杂货" : queryVo.getCatalog_name());
		ResultModel resultModel = productService.getProductList(queryVo);
		
		model.addAttribute("queryString", queryVo.getQueryString());
		model.addAttribute("catalog_name", queryVo.getCatalog_name());
		model.addAttribute("price", queryVo.getPrice());
		model.addAttribute("sort", queryVo.getSort());
		model.addAttribute("pageCount", resultModel.getPageCount());
		model.addAttribute("curPage", resultModel.getCurPage());
		model.addAttribute("recordCount", resultModel.getRecordCount());
		model.addAttribute("list", resultModel.getProductList());
		return "productList";
	}
	
	@RequestMapping(value="/admin", method=RequestMethod.GET)
	public String showAdmin() {
		return "admin";
	}
	
	@RequestMapping(value="/admin", method=RequestMethod.POST)
	public String createIndex(Model model) throws Exception{
		productService.createIndexDump();
		model.addAttribute("result", "索引库已经成功创建");
		return "admin";
	}

}

七、测试

实现一个文件的搜索功能,通过关键字搜索文件,凡是文件名或文件内容包括关键字的文件都需要找出来。还可以根据中文词语进行查询,并且支持多种条件查询。
1. 首先访问:http://localhost:8080/JDlucene/admin 创建索引库
Lucene实现京东搜索(八)_第4张图片
索引创建完毕后,你将会看到:
Lucene实现京东搜索(八)_第5张图片
2. 然后你需要访问主页:http://localhost:8080/JDlucene/list
Lucene实现京东搜索(八)_第6张图片


源代码的github地址: https://github.com/lucene-in-action/JDlucene

你可能感兴趣的:([专栏]Lucene基本原理)