博客
关于我
SSM商城项目(七)
阅读量:431 次
发布时间:2019-03-06

本文共 4269 字,大约阅读时间需要 14 分钟。

Solr服务搭建与搜索功能实现

学习计划

本文将详细介绍Solr服务的搭建、搜索功能的实现,以及如何使用SolrJ管理索引库,最后将商品数据导入索引库并实现搜索功能。


Solr服务搭建

环境配置

Solr是一个基于Java的开源搜索引擎,主要用于文本搜索和数据分析。在搭建Solr服务之前,需要先准备好以下环境:

  • 安装JDK:Solr是Java开发的,需要先安装Java Development Kit(JDK)。
  • 安装Tomcat:Solr通常部署在Tomcat或其他Web容器中。
  • 安装Linux环境:由于Solr主要在Linux系统上运行,需要先安装好Linux系统。

  • 搭建步骤

  • 上传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文件中配置。需要定义以下字段:

  • 商品Id
  • 商品标题
  • 商品卖点
  • 商品价格
  • 商品图片
  • 商品分类名称
  • 配置步骤

  • 添加中文分析器

    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服务,确保业务域配置生效。


  • 搜索功能实现

    搜索服务工程搭建

    搜索服务工程主要包含以下模块:

  • e3-search-interface(JAR):提供搜索接口。
  • e3-search-Service(WAR):提供搜索服务。
  • e3-search-web(WAR):提供Web界面。
  • 使用SolrJ管理索引库

    添加文档

  • 添加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层实现

  • 创建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进行数据库操作。


  • 搜索功能实现

    Controller实现

  • 搜索接口

    定义搜索接口:

    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/

    你可能感兴趣的文章
    NodeMCU教程 http请求获取Json中文乱码解决方案
    查看>>
    Nodemon 深入解析与使用
    查看>>
    NodeSession:高效且灵活的Node.js会话管理工具
    查看>>
    node~ http缓存
    查看>>
    node不是内部命令时配置node环境变量
    查看>>
    node中fs模块之文件操作
    查看>>
    Node中同步与异步的方式读取文件
    查看>>
    node中的get请求和post请求的不同操作【node学习第五篇】
    查看>>
    Node中的Http模块和Url模块的使用
    查看>>
    Node中自启动工具supervisor的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    node全局对象 文件系统
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装卸载linux,Linux运维知识之linux 卸载安装node npm
    查看>>
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>