博客
关于我
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/

    你可能感兴趣的文章
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>