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

本文共 4316 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Nodejs+Express+Mysql实现简单用户管理增删改查
    查看>>
    nodejs+nginx获取真实ip
    查看>>
    nodejs-mime类型
    查看>>
    NodeJs——(11)控制权转移next
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>
    nodejs下的express安装
    查看>>
    nodejs与javascript中的aes加密
    查看>>
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    nodejs中express的使用
    查看>>
    Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
    查看>>
    Nodejs中的fs模块的使用
    查看>>
    NodeJS使用淘宝npm镜像站的各种姿势
    查看>>
    NodeJs入门知识
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs在Liunx上的部署生产方式-PM2
    查看>>
    nodejs基于art-template模板引擎生成
    查看>>
    nodejs字符与字节之间的转换
    查看>>