博客
关于我
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负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NHibernate学习[1]
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>