本文共 4269 字,大约阅读时间需要 14 分钟。
本文将详细介绍Solr服务的搭建、搜索功能的实现,以及如何使用SolrJ管理索引库,最后将商品数据导入索引库并实现搜索功能。
Solr是一个基于Java的开源搜索引擎,主要用于文本搜索和数据分析。在搭建Solr服务之前,需要先准备好以下环境:
上传Solr压缩包
将Solr的压缩包上传到Linux系统中。解压Solr
在Linux终端中解压Solr压缩包:tar -xf solr-4.10.3.tar.gz
安装Tomcat
如果尚未安装Tomcat,可以选择解压并复制到/usr/local/tomcat目录:cp -rf apache-tomcat-7 /usr/local/tomcat
部署Solr到Tomcat
将Solr的war包部署到Tomcat的webapps目录下,启动Tomcat后会自动解压war包。配置Solr
在/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib目录下,将solr-4.10.3/example/lib/ext中的所有jar包复制到该目录:cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
创建SolrHome目录
将example/solr目录复制到/usr/local/solr/solrhome:cp -r solr /usr/local/solr/solrhome
修改web.xml文件
在Solr工程的web.xml文件中配置SolrHome的路径,确保Solr服务能够正确加载。启动Tomcat
启动Tomcat后,访问http://localhost:8080/solr,如果看到Solr的启动界面表示安装成功。在Solr中定义业务域,主要在schema.xml文件中配置。需要定义以下字段:
添加中文分析器
将IKAnalyzer2012FF_u1.jar添加到Solr工程的lib目录:cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
配置FieldType
在schema.xml中添加自定义FieldType:配置业务域
在schema.xml中定义各字段,并设置字段类型:重启Tomcat
配置完成后,重启Tomcat服务,确保业务域配置生效。搜索服务工程主要包含以下模块:
添加SolrJ jar包
在项目中添加SolrJ的依赖:org.apache.solr solr-solrj 4.10.3
创建SolrServer对象
使用HttpSolrServer创建Solr服务连接:SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8090/solr");创建文档对象
SolrInputDocument document = new SolrInputDocument();
添加域
添加必须的id域,并确保域名在schema.xml中定义:document.addField("id", "1");document.addField("item_title", "测试商品");document.addField("item_price", "199");提交文档
将文档添加到索引库并提交:solrServer.add(document);solrServer.commit();
删除文档
使用deleteById方法删除文档:solrServer.deleteById("id:1");提交操作
提交后才会永久删除文档:solrServer.commit();
创建Dao接口
public interface ItemMapper { List getItemList();} 创建Pojo类
public class SearchItem implements Serializable { private String id; private String title; private String sell_point; private long price; private String image; private String category_name; // setter和getter方法}创建Mapper文件
数据库连接
确保数据库连接配置正确,使用MyBatis进行数据库操作。搜索接口
定义搜索接口:public interface SearchService { SearchResult search(String keyWord, int page, int rows) throws Exception;}实现类
public class SearchServiceImpl implements SearchService { @Autowired private SearchDao searchDao; @Override public SearchResult search(String keyWord, int page, int rows) throws Exception { SolrQuery query = new SolrQuery(); query.setQuery(keyWord); query.setStart((page - 1) * rows); query.setRows(rows); query.setHighlight(true); query.addHighlightField("item_title"); query.setHighlightSimplePre("color:red"); query.setHighlightSimplePost(""); query.set("df", "item_title"); SearchResult result = searchDao.search(query); result.setTotalPages((int) (result.getRecourdCount() / rows) + (result.getRecourdCount() % rows > 0 ? 1 : 0)); return result; }}Controller实现
public class SearchController { @Autowired private SearchService searchService; @Value("${PAGE_ROWS}") private Integer PAGE_ROWS; @RequestMapping("/search") public String search(@RequestParam(defaultValue="1") Integer page, Model model, String keyword) throws Exception { keyword = new String(keyword.getBytes("iso8859-1"), "utf-8"); SearchResult result = searchService.search(keyword, page, PAGE_ROWS); model.addAttribute("itemList", result.getItemList()); model.addAttribute("totalPages", result.getTotalPages()); model.addAttribute("recourdCount", result.getRecourdCount()); return "search"; }}以上文档详细介绍了Solr服务的搭建、业务域的配置以及搜索功能的实现,涵盖了从环境配置到实际开发的全过程。
转载地址:http://rheuz.baihongyu.com/